r - 根据 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 我会做一个合并,但这里我有几个]
解决方案
也许您可以使用以下基本 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))
推荐阅读
- swift - Firestore 安全规则和 Swift
- python - 数据帧的 Loess/lowess 错误——ValueError:值的长度与索引的长度不匹配
- html - 如何使用记事本++将HTML文件作为文字而不是代码打开?
- python - Python-Flask:前端客户端可以从连接到某些公司服务的 websocket 接收数据流吗?
- node.js - 为什么我的 dockerized nodejs 服务器无法连接到我的 dockerized mongodb?
- react-native - 如何在没有 Nodejs 的情况下使用 Webview 在 Expo ReactNative 应用程序中实现 PayPal
- php - 如何在 PHP 中使用 preg_match 从字符串中提取 IP:?
- html - 如何增加文本与其下划线之间的差距
- java - 旋转录制的鼠标移动 [Java]
- discord.js - 如何检测消息是否是嵌入的(discord.js)