不使用列名称对数据框进行子集化

时间:2014-08-28 18:19:11

标签: r subset

我想知道是否有更好的方法可以做到这一点,或者我是否遇到了一些不可预见的麻烦。我需要从数据框中进行子集,但我不想使用列名。我需要通过引用列号来实现。

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个连续NAs的行,而不是第5列中的有效数字。最好我能提出而不使用列名是这样的:< / p>

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

有人看到这方面有任何问题或知道更好的方法吗?我担心在子集中使用子集,尽管每件事看起来都应该正常工作。

1 个答案:

答案 0 :(得分:4)

如果您希望稍微压缩一下代码,可以执行以下操作:

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