【问题标题】:Conditional row removal in an R data frameR数据框中的条件行删除
【发布时间】:2015-05-28 18:31:27
【问题描述】:

这是一个示例数据框:

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

【问题讨论】:

    标签: r subset


    【解决方案1】:

    只使用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 的那个特性(显然)。
    【解决方案2】:

    试试

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-26
      • 2019-04-07
      • 2020-09-02
      • 2022-10-14
      • 1970-01-01
      • 2022-06-10
      • 2018-06-04
      相关资源
      最近更新 更多