r - 如何根据与第三列的匹配将数据框列中的值替换为另一列的值?
问题描述
我在尝试将具有四个变量的数据帧的值转换为另一个数据帧中的特定列的值时遇到问题,其中两个变量基于第三列之间的匹配。
在数据帧 df1 中,我有一个 meta_#,它对应于与 meta_# 在同一行中表示的 iso_#。当数据帧中的 meta_# 匹配时,我希望相应的 iso_# 替换 df2 中的 meta_#。
使用简化的数据集,例如:
当 df1$V1 与 df2$V1、df2$V2、df2$V3 和 df2$V4 中任何值的值匹配时,我希望将 df2 中的值替换为与 df1$V2 在同一行中的值各自的比赛
df1
V1 V2
1 meta_123 iso_321
2 meta_234 iso_987
3 meta_345 iso_876
4 meta_456 iso_765
5 meta_567 iso_543
6 meta_789 iso_423
df2
V1 V2 V3 V4
1 meta_123 meta_234 meta_345 meta_456
2 meta_123 meta_234 meta_345 meta_567
3 meta_123 meta_345 meta_567 meta_789
4 meta_234 meta_567 meta_456 meta_789
etc...
然后我想要以下df3
V1 V2 V3 V4
1 iso_321 iso_987 iso_876 iso_765
2 iso_321 iso_987 iso_876 iso_543
3 iso_321 iso_876 iso_543 iso_423
4 iso_987 iso_543 iso_765 iso_423
etc...
我试过了
df3 <- as.data.frame(ifelse(df2 %in% df1$V1, df1$V2))
但它只是以与它相同的顺序返回 df1$V2 的列表。
谁能帮我?
解决方案
您可以使用match
:
df2[] <- df1$V2[match(as.matrix(df2), df1$V1)]
df2
# V1 V2 V3 V4
#1 iso_321 iso_987 iso_876 iso_765
#2 iso_321 iso_987 iso_876 iso_543
#3 iso_321 iso_876 iso_543 iso_423
#4 iso_987 iso_543 iso_765 iso_423
推荐阅读
- python - 使用 Python 生成所有组合
- javascript - 在处理点击事件方面需要帮助
- c - C中的死编码
- c# - 无法执行右键单击-> 在 azure 功能上部署
- asp.net-core-2.0 - .Net 核心扩展 SeriLog 过滤不起作用
- kubernetes - 无需 kubectl 代理即可访问 Kubernetes Dashboard
- c# - Devexpress TabHeader 消失
- sql - SQL - 将符号的列值转换为以符号作为名称和布尔类型的列
- scala - 如何将 Scala 数组转换为 Java 列表?
- node.js - 使用 splice() 我们可以在不使用 findIndex() 方法的情况下从包含许多 json 对象的数组中删除特定元素吗?