我想合并这两个表,但找不到更好的方法。通常,如果我使用合并,则必须至少有一列相互匹配...
data<-data.frame(A=c("A1","A2","A3","A4"),B=c("13131,256","12141","256","684"))
A B
1 A1 13131,256
2 A2 12141
3 A3 256
4 A4 684
我想根据下表合并B列:
BNAME<-data.frame(NAME=c("Red","Green","Yellow","Black"),B=c("13131","256","12141","684"))
NAME B
1 Red 13131
2 Green 256
3 Yellow 12141
4 Black 684
所以最终的格式应该是这样的:
A B NAME
1 A1 13131,256 Red,Green
2 A2 12141 Yellow
3 A3 256 Green
4 A4 684 Black
有没有快速的方法来完成这项工作?
非常感谢!!
林普
最佳答案
我会分两步完成。首先拆分您在 data$B
中的 ID根据您的分隔符(在本例中为 ","
),然后使用这些从 BNAME
获取相关颜色名称使用 which
在第二个命令中。 *apply
family 在这里对迭代列中的每个元素很有用:
ids <- sapply( data$B , function(x) c( strsplit( x , "," ) ) , USE.NAMES = FALSE )
[[1]]
[1] "13131" "256"
[[2]]
[1] "12141"
[[3]]
[1] "256"
[[4]]
[1] "684"
data$NAME <- lapply( ids , function(x) BNAME$NAME[which( BNAME$B %in% x )] )
A B NAME
1 A1 13131,256 Red, Green
2 A2 12141 Yellow
3 A3 256 Green
4 A4 684 Black
关于r - 如何合并表并匹配具有多个因素的列的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18211862/