在R数据框中进行条件行删除

5

这是一个数据框的样例:

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
2个回答

4

我们可以只使用which.max,因为它会选择一个值(即最大值的第一个出现的索引):

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

不错,简单明了的解决方案。我之前并不知道 which.max 的这个特性(显然)。 - bshelt141

4

尝试

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接