【发布时间】:2016-12-26 00:16:25
【问题描述】:
我有一个data.frame,其中一个变量是向量(或列表),如下所示:
MyColumn <- c("A, B,C", "D,E", "F","G")
MyDF <- data.frame(group_id=1:4, val=11:14, cat=MyColumn)
# group_id val cat
# 1 1 11 A, B,C
# 2 2 12 D,E
# 3 3 13 F
# 4 4 14 G
我想要一个新的数据框,其行数与向量一样多
FlatColumn <- unlist(strsplit(MyColumn,split=","))
看起来像这样:
MyNewDF <- data.frame(group_id=c(rep(1,3),rep(2,2),3,4), val=c(rep(11,3),rep(12,2),13,14), cat=FlatColumn)
# group_id val cat
# 1 1 11 A
# 2 1 11 B
# 3 1 11 C
# 4 2 12 D
# 5 2 12 E
# 6 3 13 F
# 7 4 14 G
本质上,对于作为MyColumn(字母A到G)列表元素的每个因素,我想分配列表的相应值。每个因素在MyColumn 中只出现一次。
这种重塑/取消列出/合并有没有一种巧妙的方法?我想出了一个非常繁琐的for-循环MyDF 的行和strsplit(MyColumn,split=",") 的相应元素的长度。我很确定一定有更优雅的方式。
【问题讨论】: