R数据转换

R数据转换,r,R,我有一个R数据帧,看起来像这样: z = as.data.frame(list(Col1=c("a","c","e","g"),Col2=c("b","d","f","h"),Col3=c("1,2,5","3,5,7","9,8","1"))) > z Col1 Col2 Col3 1 a b 1,2,5 2 c d 3,5,7 3 e f 9,8 4 g h 1 a b 1 a b 2 a

我有一个R数据帧,看起来像这样:

z = as.data.frame(list(Col1=c("a","c","e","g"),Col2=c("b","d","f","h"),Col3=c("1,2,5","3,5,7","9,8","1")))
> z
  Col1 Col2  Col3
1    a    b 1,2,5
2    c    d 3,5,7
3    e    f   9,8
4    g    h     1
a    b    1
a    b    2
a    b    5
c    d    3
c    d    5
c    d    7
e    f    9 
e    f    8
g    h    1
(第三列是带有逗号分隔值的文本列。)我想将其转换为如下数据框:

z = as.data.frame(list(Col1=c("a","c","e","g"),Col2=c("b","d","f","h"),Col3=c("1,2,5","3,5,7","9,8","1")))
> z
  Col1 Col2  Col3
1    a    b 1,2,5
2    c    d 3,5,7
3    e    f   9,8
4    g    h     1
a    b    1
a    b    2
a    b    5
c    d    3
c    d    5
c    d    7
e    f    9 
e    f    8
g    h    1
有人能建议一种使用apply实现此目的的方法吗?我很接近使用下面的命令,但它不太正确。任何关于更有效的方法的建议都将不胜感激

> apply(z,1,function(a){ids=strsplit(as.character(a[3]),",")[[1]];out<-c();for(id in ids){out<-rbind(out,c(a[1:2],id))};return(out)})
[[1]]
     Col1 Col2    
[1,] "a"  "b"  "1"
[2,] "a"  "b"  "2"
[3,] "a"  "b"  "5"

[[2]]
     Col1 Col2    
[1,] "c"  "d"  "3"
[2,] "c"  "d"  "5"
[3,] "c"  "d"  "7"

[[3]]
     Col1 Col2    
[1,] "e"  "f"  "9"
[2,] "e"  "f"  "8"

[[4]]
     Col1 Col2    
[1,] "g"  "h"  "1"

>apply(z,1,函数(a){ids=strsplit(as.character(a[3]),“,”)[[1]];out您可以使用
ddply

library(plyr)
ddply(z, c("Col1", "Col2"), summarize, 
  Col3=strsplit(as.character(Col3),",")[[1]]
)

使用
重塑
重塑2

require(reshape2)
merge(cbind(z[,-3], L1=rownames(z)), melt(strsplit(as.character(z$Col3),",")))
给予


很好!两个答案都非常有效,所以不可能选择“更好的”一个。选择这个答案是因为它指向了
merge
函数,这似乎是一个很好的通用工具,我也需要学习…我还要注意,我在一个更大的真实数据集上测试了这里提供的两个解决方案,也许毫不奇怪,执行时间几乎相同。如果这有用,请不要哦,任何人。。。