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