2016-09-23 65 views
0

我有一个很大的数据集(2300 obs x 9700 var),其中我只想拥有所有样本(行)都具有上述值的所有变量(列) 10000。 我尝试了很多的代码,例如:删除所有行的值低于10000的所有列

subset <- df[,apply(df,1,function(z) !all(z<10000))] 
subset<- df[,df> 10000] 

但他们没有工作。 RowMeans不起作用,因为可能的意思是< 10000,但某些单独的行可能是>10000

有人提示如何解决这个问题?

+0

您的情况不是cl耳。在你的代码中,你循环遍历行来找到所有值小于10000的行。然后用于子集化列?这与您的行不符合正确的长度。也许你应该使用'df [apply(df,1,.....),]'如果是删除所有值低于10000的列,那么'df [!sapply(df,function(x)all x <10000))]' – akrun

回答

1

试试这个过滤掉其中的所有值都>10000所有行:

df[rowSums(df>10000)==ncol(df),] 

#  a  b  c 
#4 14139 127746 10911 
#7 11582 73952 10821 

滤除其中的所有值都>10000所有列:

df[,colSums(df>10000)==nrow(df)] 

# [1] 40004 105808 70261 127746 60177 134365 73952 86584 87551 67781 

数据

df <- structure(list(a = c(13773, 8680, 4854, 14139, 3106, 3044, 11582, 
9475, 728, 4666), b = c(40004, 105808, 70261, 127746, 60177, 
134365, 73952, 86584, 87551, 67781), c = c(1913, 2092, 14468, 
10911, 14414, 8015, 10821, 12636, 12320, 1266)), .Names = c("a", 
"b", "c"), row.names = c(NA, -10L), class = "data.frame") 

     # a  b  c 
# 1 13773 40004 1913 
# 2 8680 105808 2092 
# 3 4854 70261 14468 
# 4 14139 127746 10911 
# 5 3106 60177 14414 
# 6 3044 134365 8015 
# 7 11582 73952 10821 
# 8 9475 86584 12636 
# 9 728 87551 12320 
# 10 4666 67781 1266 
+0

非常感谢! – AnneG1990