2016-06-20 6 views
1

아마도 약간 까다 롭습니다. 그러나 데이터 프레임에서 문자열의 여러 열을 분할하는 우아한 방법을 생각해보고 싶습니다. 예를 들어, I는 종종 다음과 같이 단위가되는 값과 동일한 셀에 데이터를 엑셀 나타날데이터 프레임에서 여러 문자 벡터를 효율적으로 분할 R

df <- data.frame(A = paste(round(runif(5) * 10), "KG", sep = " "), 
      B = paste(round(runif(5) * 10), "KG", sep = " "), 
      C = paste(round(runif(5) * 10), "KG", sep = " ")) 
df 
    A B  C 
1 1 KG 9 KG 7 KG 
2 8 KG 1 KG 10 KG 
3 7 KG 8 KG 6 KG 
4 5 KG 6 KG 9 KG 
5 3 KG 2 KG 9 KG 

여기에서, 유닛은 분리되어 저장 될 필요가있다. 일반적으로 나는 다음과 같이합니다 :

df2 <- as.data.frame(apply(df, 2, 
    function(x) as.numeric(lapply(strsplit(as.character(x), 
    split = " ", fixed = TRUE), "[", 1)))) 

df3 <- as.data.frame(apply(df, 2, 
    function(x) as.character(lapply(strsplit(as.character(x), 
    split = " ", fixed = TRUE), "[", 2)))) 

df4 <- cbind(df2, df3) 
df4 
    A B C A B C 
1 1 9 7 KG KG KG 
2 8 1 10 KG KG KG 
3 7 8 6 KG KG KG 
4 5 6 9 KG KG KG 
5 3 2 9 KG KG KG 

작동하지만 구현하기가 번거 롭습니다. 이러한 유형의 문제에 대한 더 나은 해결책이 있습니까?

답변

1

우리는 그것을 함께 paste과 또 다른 옵션은 cSplit

library(splitstackshape) 
cSplit(df, names(df), " ") 

주입니다 read.table

read.table(text=do.call(paste, df), sep="", header=FALSE, stringsAsFactors=FALSE) 
# V1 V2 V3 V4 V5 V6 
#1 4 KG 0 KG 6 KG 
#2 2 KG 5 KG 4 KG 
#3 4 KG 10 KG 1 KG 
#4 9 KG 4 KG 7 KG 
#5 1 KG 9 KG 5 KG 

읽을 수있는 값은 OP에 의해 호출되지 않은 set.seed으로 다르다.

+1

훨씬 빠르고 간단합니다. 감사! – hubbs5

관련 문제