我有一个数据框(x),其中包含一个因子变量,其值由逗号分隔。我有另一个数据框(y),其中包含相同值的描述。现在我想用数据框(y)中的描述替换数据框(x)中的值。任何帮助都将受到高度赞赏。
例如,假设两个数据框如下所示data frame (x)
s.no x
1 2,5,45
2 35,5
3 45
data fram (y)
s.no x description
1 2 a
2 5 b
3 45 c
4 35 d
我需要输出如下
s.no x
1 a,b,c
2 d,b
c c
答案 0 :(得分:5)
使用<noscript>
<style>
#jsOnly {
display: none;
}
</style>
</noscript>
<noscript>JavaScript is disabled</noscript>
<p id="jsOnly">JavaScript is enabled</p>
:
splitstackshape
答案 1 :(得分:4)
使用dplyr
和tidyr
的解决方案:
library(dplyr)
library(tidyr)
x %>%
separate(x, paste0('x',1:3),',',convert=TRUE) %>%
gather(var, x, -1, na.rm=TRUE) %>%
left_join(., y, by='x') %>%
group_by(s.no = s.no.x) %>%
summarise(x = paste(description,collapse = ','))
结果:
s.no x
(int) (chr)
1 1 a,b,c
2 2 d,b
3 3 c
答案 2 :(得分:3)
我们可以split
'x'数据集中的'x'列,','循环遍历list
,将值与'y'中的'x'列匹配,即可获得数字索引,从'y'和paste
得到相应的'description'值。
x$x <- sapply(strsplit(x$x, ","), function(z)
toString(y$description[match(as.numeric(z), y$x)]))
x
# s.no x
#1 1 a, b, c
#2 2 d, b
#3 3 c
注意:如果“x”中的“x”列为factor
类,请使用strsplit(as.character(x$x, ","))