首页 > 解决方案 > 根据 R 中另一个数据框的规则,将多个变量添加到数据框

问题描述

这是我的数据的示例(都是 data.frames):

表格1:

0_x 1_x 2_x .... 20_x
cat cat red......green
dog red green     cat
bee blue bee....  dog
........

和表 2

  x    name       code
cat    animals     1
dog    animals     1
bee    animals.    1
green  colours     2
red    colours.    2
...

我想获得以下结果:

0_y 1_y 2_y .... 20_y  0_x 1_x 2_x .... 20_x
1    1    2.....  2    cat cat red......green
1    2    2       1    dog red green     cat
1    2    1....   1    ....
........

基本上,表 2 包含一个规则,如果 0_x 是一只猫,我想用它来创建要添加到表 1 的变量,我希望 0_y 等于 1(因为在表 2 中 cat = 1)

如何以优雅的方式获得此结果?(如果我只有一个变量 0_x 我会做一个合并,但这里我有几个]

标签: rdataframe

解决方案


也许您可以使用以下基本 R 解决方案,使用match()+unlist()

df1post <- df1
df1[] <- df2$code[match(unlist(df1),df2$x)]
dfout <- cbind(`names<-`(df1,gsub("_x","_y",names(df1))),df1post)

这样

> dfout
  0_y 1_y 2_y 20_y 0_x  1_x   2_x  20_x
1   1   1   2    2 cat  cat   red green
2   1   2   2    1 dog  red green   cat
3   1  NA   1    1 bee blue   bee   dog

数据

df1 <- structure(list(`0_x` = c("cat", "dog", "bee"), `1_x` = c("cat", 
"red", "blue"), `2_x` = c("red", "green", "bee"), `20_x` = c("green", 
"cat", "dog")), class = "data.frame", row.names = c(NA, -3L))

df2 <- structure(list(x = c("cat", "dog", "bee", "green", "red"), name = c("animals", 
"animals", "animals.", "colours", "colours."), code = c(1L, 1L, 
1L, 2L, 2L)), class = "data.frame", row.names = c(NA, -5L))

推荐阅读