问题描述
我想根据 A
中列中的匹配数据返回 E
到 F
列中的列名。然后我想将该值返回到一个新列 G
中。
例如:
df <- structure(list(A = c(-0.113802816901408,-0.613802816901408,0.136197183098592,0.126197183098592,0.286197183098592),B = c(-0.294595070422536,-0.504595070422535,0.125404929577464,0.135404929577464,0.275404929577465
),C = c(-0.277065727699531,-0.507065727699531,0.282934272300469,0.0729342723004693,0.122934272300469),D = c(-0.222699530516432,-0.132699530516432,-0.162699530516432,0.127300469483568,-0.0126995305164321
),E = c(-0.246845657276995,-0.426845657276995,-0.186845657276995,0.133154342723005,0.113154342723004),F = c(-0.222699530516432,0.275404929577465
)),row.names = c(NA,5L),class = "data.frame")
所以 G
列的向量最终应该是:D
、E
、A
、E
、B
理想情况下,如果有多个匹配项(我认为我的示例没有),最好将此类信息发送到新列或抛出错误。不过,第二个问题并不那么重要。
解决方法
将前 5 列与 F
列进行比较,并使用 max.col
获得具有相同值的列号。
df$G <- names(df)[max.col(df[1:5] == df$F)]
df
# A B C D E F G
#1 -0.1138028 -0.2945951 -0.27706573 -0.22269953 -0.2468457 -0.2226995 D
#2 -0.6138028 -0.5045951 -0.50706573 -0.13269953 -0.4268457 -0.4268457 E
#3 0.1361972 0.1254049 0.28293427 -0.16269953 -0.1868457 0.1361972 A
#4 0.1261972 0.1354049 0.07293427 0.12730047 0.1331543 0.1331543 E
#5 0.2861972 0.2754049 0.12293427 -0.01269953 0.1131543 0.2754049 B
在多个匹配的情况下,max.col
返回一个随机列号。您可以通过指定 ties.method
来处理它。有关详细信息,请参阅 ?max.col
。