R 基于列值删除行
“mydata”中有四个变量,我需要删除x1或x2中有NA的行(但不包括其他变量)。所以 我所拥有的R 基于列值删除行,r,na,R,Na,“mydata”中有四个变量,我需要删除x1或x2中有NA的行(但不包括其他变量)。所以 我所拥有的 mydata <- data.frame(y=c(1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,4), x1=c(1,NA,1,2,4,5,1, NA ,2,5,2,6,2,6,NA,2,6,NA), x2=c(1,NA,1,NA,1,1,8,2,2,2,4,1,NA,1,4,2,7,NA), x3=c(1,4,1,NA,1,1,8,2,2,NA,4,1,1,1,NA
mydata <- data.frame(y=c(1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,4), x1=c(1,NA,1,2,4,5,1, NA ,2,5,2,6,2,6,NA,2,6,NA), x2=c(1,NA,1,NA,1,1,8,2,2,2,4,1,NA,1,4,2,7,NA), x3=c(1,4,1,NA,1,1,8,2,2,NA,4,1,1,1,NA,2,7,2))
你可以试试
mydata[!rowSums(is.na(mydata[,c('x1', 'x2')])),]
# y x1 x2 x3
#1 1 1 1 1
#3 1 1 1 1
#5 1 4 1 1
#6 2 5 1 1
#7 2 1 8 8
#9 2 2 2 2
#10 3 5 2 NA
#11 3 2 4 4
#12 3 6 1 1
#14 4 6 1 1
#16 4 2 2 2
#17 4 6 7 7
或
你可以试试
mydata[!rowSums(is.na(mydata[,c('x1', 'x2')])),]
# y x1 x2 x3
#1 1 1 1 1
#3 1 1 1 1
#5 1 4 1 1
#6 2 5 1 1
#7 2 1 8 8
#9 2 2 2 2
#10 3 5 2 NA
#11 3 2 4 4
#12 3 6 1 1
#14 4 6 1 1
#16 4 2 2 2
#17 4 6 7 7
或
你可以试试
mydata[!rowSums(is.na(mydata[,c('x1', 'x2')])),]
# y x1 x2 x3
#1 1 1 1 1
#3 1 1 1 1
#5 1 4 1 1
#6 2 5 1 1
#7 2 1 8 8
#9 2 2 2 2
#10 3 5 2 NA
#11 3 2 4 4
#12 3 6 1 1
#14 4 6 1 1
#16 4 2 2 2
#17 4 6 7 7
或
你可以试试
mydata[!rowSums(is.na(mydata[,c('x1', 'x2')])),]
# y x1 x2 x3
#1 1 1 1 1
#3 1 1 1 1
#5 1 4 1 1
#6 2 5 1 1
#7 2 1 8 8
#9 2 2 2 2
#10 3 5 2 NA
#11 3 2 4 4
#12 3 6 1 1
#14 4 6 1 1
#16 4 2 2 2
#17 4 6 7 7
或
另一种可能是
mydata[is.na(mydata$x1)==FALSE & is.na(mydata$x2) == FALSE, ]
# y x1 x2 x3
#1 1 1 1 1
#3 1 1 1 1
#5 1 4 1 1
#6 2 5 1 1
#7 2 1 8 8
#9 2 2 2 2
#10 3 5 2 NA
#11 3 2 4 4
#12 3 6 1 1
#14 4 6 1 1
#16 4 2 2 2
#17 4 6 7 7
幕后:is.na
只是检查逻辑状态,例如
is.na(mydata$x1)
#[1] FALSE TRUE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
#[12] FALSE FALSE FALSE TRUE FALSE FALSE TRUE
is.na(mydata$x2)
#[1] FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
#[12] FALSE TRUE FALSE FALSE FALSE FALSE TRUE
所以把它们放在一起
is.na(mydata$x1) == FALSE & is.na(mydata$x2) == FALSE
#[1] TRUE FALSE TRUE FALSE TRUE TRUE TRUE FALSE TRUE TRUE TRUE
#[12] TRUE FALSE TRUE FALSE TRUE TRUE FALSE
然后[*,]
将保留12行,其中为.na(mydata$x1)==FALSE&is.na(mydata$x2)==FALSE
为为真。akrun回答中的第二个建议使用了相同的逻辑,但利用了not运算符代码>,这是解决问题的另一种好方法。另一种方法可能是
mydata[is.na(mydata$x1)==FALSE & is.na(mydata$x2) == FALSE, ]
# y x1 x2 x3
#1 1 1 1 1
#3 1 1 1 1
#5 1 4 1 1
#6 2 5 1 1
#7 2 1 8 8
#9 2 2 2 2
#10 3 5 2 NA
#11 3 2 4 4
#12 3 6 1 1
#14 4 6 1 1
#16 4 2 2 2
#17 4 6 7 7
幕后:is.na
只是检查逻辑状态,例如
is.na(mydata$x1)
#[1] FALSE TRUE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
#[12] FALSE FALSE FALSE TRUE FALSE FALSE TRUE
is.na(mydata$x2)
#[1] FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
#[12] FALSE TRUE FALSE FALSE FALSE FALSE TRUE
所以把它们放在一起
is.na(mydata$x1) == FALSE & is.na(mydata$x2) == FALSE
#[1] TRUE FALSE TRUE FALSE TRUE TRUE TRUE FALSE TRUE TRUE TRUE
#[12] TRUE FALSE TRUE FALSE TRUE TRUE FALSE
然后[*,]
将保留12行,其中为.na(mydata$x1)==FALSE&is.na(mydata$x2)==FALSE
为为真。akrun回答中的第二个建议使用了相同的逻辑,但利用了not运算符代码>,这是解决问题的另一种好方法。另一种方法可能是
mydata[is.na(mydata$x1)==FALSE & is.na(mydata$x2) == FALSE, ]
# y x1 x2 x3
#1 1 1 1 1
#3 1 1 1 1
#5 1 4 1 1
#6 2 5 1 1
#7 2 1 8 8
#9 2 2 2 2
#10 3 5 2 NA
#11 3 2 4 4
#12 3 6 1 1
#14 4 6 1 1
#16 4 2 2 2
#17 4 6 7 7
幕后:is.na
只是检查逻辑状态,例如
is.na(mydata$x1)
#[1] FALSE TRUE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
#[12] FALSE FALSE FALSE TRUE FALSE FALSE TRUE
is.na(mydata$x2)
#[1] FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
#[12] FALSE TRUE FALSE FALSE FALSE FALSE TRUE
所以把它们放在一起
is.na(mydata$x1) == FALSE & is.na(mydata$x2) == FALSE
#[1] TRUE FALSE TRUE FALSE TRUE TRUE TRUE FALSE TRUE TRUE TRUE
#[12] TRUE FALSE TRUE FALSE TRUE TRUE FALSE
然后[*,]
将保留12行,其中为.na(mydata$x1)==FALSE&is.na(mydata$x2)==FALSE
为为真。akrun回答中的第二个建议使用了相同的逻辑,但利用了not运算符代码>,这是解决问题的另一种好方法。另一种方法可能是
mydata[is.na(mydata$x1)==FALSE & is.na(mydata$x2) == FALSE, ]
# y x1 x2 x3
#1 1 1 1 1
#3 1 1 1 1
#5 1 4 1 1
#6 2 5 1 1
#7 2 1 8 8
#9 2 2 2 2
#10 3 5 2 NA
#11 3 2 4 4
#12 3 6 1 1
#14 4 6 1 1
#16 4 2 2 2
#17 4 6 7 7
幕后:is.na
只是检查逻辑状态,例如
is.na(mydata$x1)
#[1] FALSE TRUE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
#[12] FALSE FALSE FALSE TRUE FALSE FALSE TRUE
is.na(mydata$x2)
#[1] FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
#[12] FALSE TRUE FALSE FALSE FALSE FALSE TRUE
所以把它们放在一起
is.na(mydata$x1) == FALSE & is.na(mydata$x2) == FALSE
#[1] TRUE FALSE TRUE FALSE TRUE TRUE TRUE FALSE TRUE TRUE TRUE
#[12] TRUE FALSE TRUE FALSE TRUE TRUE FALSE
然后[*,]
将保留12行,其中为.na(mydata$x1)==FALSE&is.na(mydata$x2)==FALSE
为为真。akrun回答中的第二个建议使用了相同的逻辑,但利用了not运算符代码>,这是解决问题的另一个好方法