2015-04-23 12 views
1

的我有一個數據幀x具有2字符列:R:重塑數據幀,當一個列具有不相等的數量的條目

x <- data.frame(a = numeric(), b = I(list())) 
x[1:3,"a"] = 1:3 
x[[1, "b"]] <- "a, b, c" 
x[[2, "b"]] <- "d, e" 
x[[3, "b"]] <- "f" 
x$a = as.character(x$a) 
x$b = as.character(x$b) 
x 
str(x) 

在列B中的條目是字符的逗號分隔的字符串。 我需要產生該數據幀:

1b中

1c中

2 d

2e中

3 F

我當我逐行循環時知道如何去做。但有沒有可能循環?

謝謝!

+0

如果答案解決了你的問題,你可以檢查它表明是正確的!由@anandmahto包裝的 – vagabond

回答

0
> s <- strsplit(as.character(x$b), ',') 
> data.frame(value=rep(x$a, sapply(s, FUN=length)),b=unlist(s)) 
    value b 
1  1 a 
2  1 b 
3  1 c 
4  2 d 
5  2 e 
6  3 f 
0

你去那裏,應該是非常快:

library(data.table) 

x <- data.table(x) 
x[ ,strsplit(b, ","), by = a] 
1

你檢查出require(splitstackshape)

> cSplit(x, "b", ",", direction = "long") 

    a b 
1: 1 a 
2: 1 b 
3: 1 c 
4: 2 d 
5: 2 e 
6: 3 f 
+0

包裝 – vagabond