我有一个这样的数据框:
V1 V2 V3
0.4 -0.9 0.6
0.8 -0.2 0.4
-0.6 0.1 0.8
我想获得最大值(符号无关紧要),并在最后一列中打印出具有最高值的列的名称。
我想要这个:
V1 V2 V3 MAX
0.4 -0.9 0.6 V2
0.8 -0.2 0.4 V1
-0.6 0.1 0.8 V3
有什么想法吗?
答案 0 :(得分:4)
我们可以对数据帧的绝对值使用max.col
。
df$MAX <- names(df)[max.col(abs(df))]
df
# V1 V2 V3 MAX
#1 0.4 -0.9 0.6 V2
#2 0.8 -0.2 0.4 V1
#3 -0.6 0.1 0.8 V3
类似地,我们还可以逐行使用apply
解决方案来从每一行中获取最大值
names(df)[apply(abs(df), 1, which.max)]
#[1] "V2" "V1" "V3"
数据
df <- structure(list(V1 = c(0.4, 0.8, -0.6), V2 = c(-0.9, -0.2, 0.1
), V3 = c(0.6, 0.4, 0.8)), class = "data.frame", row.names = c(NA,
-3L))