在 R 中,如何根据 F 列中的匹配数据 return 从 A 列到 E 列的名称?

In R, how to return the name from columns A through E based on matching data in column in F?

我想 return 根据 F 中列中的匹配数据 AE 中的列名称。然后我想 return 将值放入新列 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.426845657276995, 0.136197183098592, 0.133154342723005, 0.275404929577465
)), row.names = c(NA, 5L), class = "data.frame")

所以第 G 列的向量最终应该是:DEAEB

理想情况下,如果有多个匹配项(我认为我的示例没有),最好将此类信息发送到新列或者可能引发错误。不过,第二个问题并不那么重要。

将前 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 returns 随机列号。您可以通过指定 ties.method 来处理它。有关详细信息,请参阅 ?max.col