dim <- data.frame(Max = c(1,2,3), Fax = c(4,5,6))
> dim
Max Fax
1 1 4
2 2 5
3 3 6
min <- data.frame(Num=c(1,2,3), Words = c("ab bc de","ma pa","ka da sa ba"))
> min
Num Words
1 1 ab bc de
2 2 ma pa
3 3 ka da sa ba
我有两个数据框,昏暗的和最小的。两个数据帧中的行数相同。现在,我想向暗数据框添加另一列(单词),暗数据框将如下所示:
> dim
Max Fax Words
1 1 4 ab
2 1 4 bc
3 1 4 de
4 2 5 ma
5 2 5 pa
6 3 6 ka
7 3 6 da
8 3 6 sa
9 3 6 ba
我认为merge
先分裂然后再分裂会更有效。这里有两个可供考虑的选择:
library(data.table)
DT <- data.table(merge(dim, min, by.x = "Max", by.y = "Num"), key = "Max,Fax")
DT[, list(unlist(strsplit(as.character(Words), " "))), by = key(DT)]
# Max Fax V1
# 1: 1 4 ab
# 2: 1 4 bc
# 3: 1 4 de
# 4: 2 5 ma
# 5: 2 5 pa
# 6: 3 6 ka
# 7: 3 6 da
# 8: 3 6 sa
# 9: 3 6 ba
concat.split.multiple
我的“ splitstackshape”包中的内容可以轻松处理此类问题(尽管它并不总是最快的解决方案)。
library(splitstackshape)
concat.split.multiple(merge(dim, min, by.x = "Max", by.y = "Num"),
"Words", " ", "long")
# Max Fax time Words
# 1 1 4 1 ab
# 2 2 5 1 ma
# 3 3 6 1 ka
# 4 1 4 2 bc
# 5 2 5 2 pa
# 6 3 6 2 da
# 7 1 4 3 de
# 8 2 5 3 <NA>
# 9 3 6 3 sa
# 10 1 4 4 <NA>
# 11 2 5 4 <NA>
# 12 3 6 4 ba
complete.cases
如果要摆脱NA
的输出中的值,可以使用concat.split.multiple
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句