与R中

与R中

问题描述:

值的具体数目数据帧查找列我有一个数据帧(data.table)超过3000列。我需要找出我的数据框中只有2个和少于2个值的列。然后,我提取了2个以下的列后,我想把它们从原始数据框中删除。 我说明如下: 原始数据帧与R中

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 

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

+2

你做你自己的任何企图提出一个非常类似的问题最近https://*.com/questions/34902809后?你在这个过程中的某个地方卡住了吗? –

+2

使用'dput'提供示例数据也很有帮助。 – mrub

+0

@docendodiscimus感谢您提供宝贵的信息。但是,这个问题是基于多种条件,而我不是。我对这个软件很陌生。 – Aquarius

我们可以使用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)] 
+0

谢谢你的答复和道歉的重复。你能告诉我,我无法将其存档,例如'df Aquarius

+1

@Aquarius如果它是一个'data.table',然后使用与'= FALSE',即'DF1 [,1:100,与= FALSE]' – akrun

+0

谢谢它的工作原理。你能告诉我这个'with = FALSE'部分代码的目的是什么。 – Aquarius