选择所有列中特定列中的值最大的行
我正在尝试选择数据框中的行,其中 X1 中的值是所有行中的最大值。
X1 <- c(0.7,0.6,0.2,0.5,0.2,0.1,0.1,0.1,0.3,0.2)
X2 <- c(0.1,0.2,0.6,0.3,0.7,0.8,0.1,0.1,0.2,0.7)
X3 <- c(0.1,0.2,0.8,0.2,0.2,0.1,0.4,0.2,0.1,0.2)
df <- data.frame(X1,X2,X3)
从可视化数据中可以看出,X1 是第 1、2、4、9 行的最大值。我尝试用循环写这样的东西,但没有成功。
df[ df$X1[i] == max(df[ [i] ,] ) , ]
是否需要通过循环来完成,还是可以使用函数来完成?任何帮助是极大的赞赏。谢谢
回答
do.call(pmax, df)将为您提供每行的最大值,您可以将其与X1选择行中最大值为 的行进行比较X1。
df[df$X1 == do.call(pmax, df), ]
# X1 X2 X3
#1 0.7 0.1 0.1
#2 0.6 0.2 0.2
#4 0.5 0.3 0.2
#9 0.3 0.2 0.1
也可以通过以下方式实现apply:
df[df$X1 == apply(df, 1, max), ]
回答
处理它的另一种方法,如果您有兴趣:
library(dplyr)
df %>%
rowwise() %>%
filter(max(c_across(X1:X3)) == X1)
# A tibble: 4 x 3
# Rowwise:
X1 X2 X3
<dbl> <dbl> <dbl>
1 0.7 0.1 0.1
2 0.6 0.2 0.2
3 0.5 0.3 0.2
4 0.3 0.2 0.1