【问题标题】:How to use sapply function on specific columns?如何在特定列上使用 sapply 函数?
【发布时间】:2021-03-01 08:10:55
【问题描述】:

我有一个函数可以删除没有给定数量的唯一值的列。该命令对整个数据帧执行此操作。我将如何在特定列上执行此操作?说第 3 到 50 列?谢谢。

ms_10 <- ms_10[, sapply(ms_10, function(col) length(unique(col))) > 440]

【问题讨论】:

    标签: r sapply


    【解决方案1】:

    您可以先对数据进行子集化,然后再应用相同的函数。

    new_data <- ms_10[3:50]
    new_data <- new_data[, sapply(new_data, function(col) length(unique(col))) > 440]
    

    如果您不想创建临时变量 (new_data)。

    ms_10[3:50][, sapply(ms_10[3:50], function(col) length(unique(col))) > 440]
    

    我们也可以使用dplyr

    library(dplyr)
    
    ms_10 %>%
      select(3:50) %>%
      select(where(~n_distinct(.) > 440))
    

    【讨论】:

    • 有没有办法在将第 1 列和第 2 列保留在 df 中的同时做到这一点?我希望将函数应用于 3:50,但仍希望保留第 1 列和第 2 列。
    • 你可以cbind前2列到上面的输出。 cbind(ms_10[1:2], new_data)
    【解决方案2】:

    我们可以使用

    Filter(function(x) length(unique(x)) > 440, ms_10[3:50])
    

    【讨论】:

      猜你喜欢
      • 2020-05-24
      • 2020-08-20
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-21
      • 2015-07-14
      相关资源
      最近更新 更多