替换其他数据帧的值

时间:2016-04-25 07:10:56

标签: r replace dplyr

我有一个数据框(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

3 个答案:

答案 0 :(得分:5)

使用<noscript> <style> #jsOnly { display: none; } </style> </noscript> <noscript>JavaScript is disabled</noscript> <p id="jsOnly">JavaScript is enabled</p>

splitstackshape

答案 1 :(得分:4)

使用dplyrtidyr的解决方案:

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, ","))