在 R 中查找具有特定数量值的数据框中的列
Finding columns in dataframe with specific number of values in R
我有一个包含 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
非常感谢你在这方面的帮助。
我们可以使用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)]
我有一个包含 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
非常感谢你在这方面的帮助。
我们可以使用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)]