R 如何按唯一编号删除多列中的行?

R 如何按唯一编号删除多列中的行?,r,R,给定这样的数据 C1<-c(3,-999.000,4,4,5) C2<-c(3,7,3,4,5) C3<-c(5,4,3,6,-999.000) DF<-data.frame(ID=c("A","B","C","D","E"),C1=C1,C2=C2,C3=C3) 以下方法可能有效 DF[!apply(DF==-999,1,sum),] 或者如果您可以在一行上有多个-999 DF[!(apply(DF==-999,1,sum)>0),] 或 为了解决您的“奖金

给定这样的数据

C1<-c(3,-999.000,4,4,5)
C2<-c(3,7,3,4,5)
C3<-c(5,4,3,6,-999.000)
DF<-data.frame(ID=c("A","B","C","D","E"),C1=C1,C2=C2,C3=C3)
以下方法可能有效

DF[!apply(DF==-999,1,sum),]
或者如果您可以在一行上有多个-999

DF[!(apply(DF==-999,1,sum)>0),]

为了解决您的“奖金”问题,如果我们查看
?Extract.data.frame
的文档,我们将发现:

数据帧可以在几种模式下建立索引。使用
[
[[
时 使用单个索引(
x[i]
x[[i]]
),它们对数据帧进行索引,就像 它是一个列表。在这种用法中,drop参数被忽略,带有 警告

而且:

[
[
与两个索引(
x[i,j]
x[[i,j]]
一起使用时,它们 就像索引矩阵:
[
只能用于选择一个元素。 请注意,对于每个选定列,
xj
通常是(如果不是 矩阵式),结果列将是
xj[i]
,因此依赖于 相应的
[
方法,请参见示例部分


因此,您需要逗号来确保R知道您指的是一行,而不是一列。

根据您的代码,我假设您要删除所有包含-999的行

DF2 <- DF[rowSums(DF == -999) == 0, ]

DF2我不明白您的目标是否是删除所有包含至少一个NA的行,如果这是您正在寻找的,那么这可能是一个可能的答案:

DF[DF==-999] <- NA
na.omit(DF)
   ID C1 C2 C3
1  A  3  3  5
3  C  4  3  3
4  D  4  4  6

DF[DF==-999]对答案进行注释-我可以在给定行中有多个-999值,也可以使用任意函数。谢谢!
DF[!apply(DF==-999,1,sum),]
DF[!(apply(DF==-999,1,sum)>0),]
DF[!apply(DF==-999,1,any),]
DF2 <- DF[rowSums(DF == -999) == 0, ]
DF[DF==-999] <- NA
na.omit(DF)
   ID C1 C2 C3
1  A  3  3  5
3  C  4  3  3
4  D  4  4  6