在R中使用特定数量的值查找数据框中的列

时间:2016-01-22 09:31:19

标签: r data.table multiple-columns

我有一个超过3000列的数据帧(data.table)。我需要找出数据框中只有2个且少于2个值的列。然后我在用2和少于2个值提取这些列后,我想将它们从原始数据帧中删除。 我说明如下: 原始数据框

Month   A       B         C
Jan-00  0.007   NA       1758.27
Feb-00  0.004   NA       1310.43
Mar-00  0.004   NA       1260.89
Apr-00  0.004   0.0002   1137.34
May-00  0.005   6.05E-05 1595.78
Jun-00  0.003   NA       4968.89
Jul-00  0.007   NA       NA
Aug-00  0.005   NA       NA
Sep-00  0.004   NA       NA

期望的输出

     Month    A         C
    Jan-00  0.007   1758.27
    Feb-00  0.004   1310.435
    Mar-00  0.004   1260.89
    Apr-00  0.004   1137.342105
    May-00  0.005   1595.78125
    Jun-00  0.003   4968.895238
    Jul-00  0.007   NA
    Aug-00  0.005   NA
    Sep-00  0.004   NA

我很感谢你在这方面的帮助。

1 个答案:

答案 0 :(得分:4)

我们可以使用Filter

Filter(function(x) sum(!is.na(x))>2, df1)
#   Month     A       C
#1 Jan-00 0.007 1758.27
#2 Feb-00 0.004 1310.43
#3 Mar-00 0.004 1260.89
#4 Apr-00 0.004 1137.34
#5 May-00 0.005 1595.78
#6 Jun-00 0.003 4968.89
#7 Jul-00 0.007      NA
#8 Aug-00 0.005      NA
#9 Sep-00 0.004      NA

或者

df1[colSums(!is.na(df1))>2]

如果数据集是data.table

 library(data.table)
 setDT(df1)[,unlist(df1[, lapply(.SD, function(x) 
                        sum(!is.na(x))>2)]), with=FALSE]

或者

 setDT(df1)[, Filter(function(x) sum(!is.na(x))>2, .SD)]