R 数据框中的条件行删除

Conditional row removal in an R data frame

这是一个示例数据框:

df <- data.frame(t1 = c(1,2,3,4), t2 = c(7,3,8,1), t3 = c(1,1,1,1))

df
  t1 t2 t3
1  1  7  1
2  2  3  1
3  3  8  1
4  4  1  1

我的目标是从每列中删除最大值。但是,对于像 t3 这样的列,列中的所有值都相等,我会简单地删除一个值,以便数据框中的所有三列最终都变成三行,如下所示:

df2
  t1 t2 t3
1  1  7  1
2  2  3  1
3  3  1  1

只使用 which.max 怎么样,因为那样 select 只有一个值(即第一次出现最大值的索引):

as.data.frame(lapply(df, function(x) x[-which.max(x)]))
#   t1 t2 t3
# 1  1  7  1
# 2  2  3  1
# 3  3  1  1

尝试

library(data.table)
 setDT(df)[, lapply(.SD, function(x) x[-which.max(x)])]