如何通过仅采用此数据帧中2列的非NA值来对数据帧进行子集化

时间:2015-02-13 09:05:19

标签: r missing-data subset

我试图通过采用2列的整数值(我的数据框

)来对数据帧进行子集化
Subs1<-subset(DATA,DATA[,2][!is.na(DATA[,2])] & DATA[,3][!is.na(DATA[,3])])

但它给了我一个错误:较长的对象长度不是较短对象长度的倍数。

如何构建由第2列和第3列的NON NA值组成的子集?

非常感谢?

3 个答案:

答案 0 :(得分:15)

试试这个:

Subs1<-subset(DATA, (!is.na(DATA[,2])) & (!is.na(DATA[,3])))

subset的第二个参数是长度为nrow(DATA)的逻辑向量,表示是否保留相应的行。

答案 1 :(得分:4)

na.omit函数可以回答你的问题

 Subs1 <- na.omit(DATA[2:3])

[https://stat.ethz.ch/R-manual/R-patched/library/stats/html/na.fail.html]

答案 2 :(得分:3)

这是一个例子。 a,b,c是3个向量,a和b具有缺失值。 一旦它们被创建,我使用cbind将它们绑定在一个矩阵中,之后你可以转换为数据帧。

最终结果是一个数据框,其中3列中的2列具有缺失值。 因此,我们只需要保留具有完整案例的行。DATA[complete.cases(DATA), ]用于仅保留每列中没有缺失值的行。 subset对象是具有完整案例的这些行。

  a <- c(1,NA,2)
  b <- c(NA,1,2)
  c <- c(1,2,3)
  DATA <- as.data.frame(cbind(a,b,c))
  subset <-  DATA[complete.cases(DATA), ]