我有一个超过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
我很感谢你在这方面的帮助。
答案 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)]