当尝试根据第三列之间的匹配将具有四个变量的数据帧的值转换为具有两个变量的另一个数据帧中特定列的值时遇到问题。
在数据帧 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)