2014-08-28 71 views
3

我想知道是否有更好的方法来做到这一点,或者如果我可能会遇到一些无法预料的麻烦。我需要从数据框子集,但我不想使用列名称。我需要通过参考列号来做到这一点。子集数据框不使用列名

data <- data.frame(col1= c(50, 20, NA, 100, 50), 
        col2= c(NA, 25, 125, 50, NA), 
        col3= c(NA, 100, 15, 55, 25), 
        col4= c(NA, 30, 125, 100, NA), 
        col5= c(80, 25, 75, 40, NA)) 

假设我要子集的数据帧,只保留包含3倍连续的NA前5列有效的数字排尽我所能想出不使用的列名是这样的:

sub <- data[(which(is.na(data[2]) & 
        is.na(data[3]) & 
        is.na(data[4]) & 
        !is.na(data[5]))), ] 

任何人看到任何麻烦或知道更好的方法吗?我很担心在子集内使用子集,尽管每个事物似乎都在按照它应该的方式工作。

回答

4

如果你正在寻找凝聚你的代码一点,你可以这样做:

> data[rowSums(is.na(data[2:4])) == 3 & !is.na(data[5]), ] 
    col1 col2 col3 col4 col5 
1 50 NA NA NA 80 
+0

为什么列1被排除在考虑? – 2014-08-28 18:29:42

+0

@BondedDust,因为它看起来就是OP基于他们的代码之后(尽管他们的描述有点模糊)。 – A5C1D2H2I1M1N2O1R2T1 2014-08-28 18:30:40

+0

(+1)我刚刚在12分钟后完成了这个确切代码。顺便说一句,'soread()'是一个非常有用的功能。 :-) – 2014-08-28 18:39:03

相关问题