如何通过只取数据框中2列的非NA值来对数据框进行子集化

25

我试图通过提取数据框中两列的整数值来对数据框进行子集处理。

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

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

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

非常感谢!


4
我会尝试使用 DATA[complete.cases(DATA[, 2:3]), ] 这个表达式 - 它会选择列2和列3中没有NA的所有行。 - lukeA
我从未使用过类似的语句,你能否提供完整的R语法行? - EnginO
1
这是非常基础的内容,网上有很多相关信息:https://www.google.com/search?q=r+subsetting。同时也可以查看`?complete.cases`。 - lukeA
3个回答

31

试试这个:

Subs1<-subset(DATA, (!is.na(DATA[,2])) & (!is.na(DATA[,3])))
subset的第二个参数是一个逻辑向量,长度与nrow(DATA)相同,指示是否保留相应的行。

非常感谢 @cogitovita。 - EnginO

13

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), ] 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接