簡體   English   中英

如何按唯一編號刪除多列中的行?

[英]How to delete rows in multiple columns by unique number?

給出這樣的數據

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)

如何刪除所有列中的-999.000數據

我知道每列都有效

DF2<-DF[!(DF$C1==-999.000 | DF$C2==-999.000 | DF$C3==-999.000),]

但我想避免引用每一列。 我想有一種簡單的方法來引用特定數據框中的所有列,也就是:

DF3<-DF[!(DF[,]==-999.000),]

要么

DF3<-DF[!(DF[,(2:4)]==-999.000),]

但顯然這些都行不通

出於好奇,獎勵積分,如果你能告訴我為什么我需要在結束方括號之前的最后一個逗號,如:

==-999.000),]

以下可能有效

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

或者如果你可以連續多個-999

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

要么

DF[!apply(DF==-999,1,any),]

為了解決您的“獎金”問題,如果我們轉到?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, ]

至於你的獎金問題:數據框是一個矢量列表,所有這些矢量都有相同的長度。 如果我們將向量視為列,則可以將數據框視為矩陣,其中列可能具有不同的類型(數字,字符等)。 R允許您引用數據框的元素,就像引用矩陣的元素一樣; 通過使用行和列索引。 因此DF[i, j]指的是DF[i, j]的第j個向量中的第i個元素,您可以將其視為第i行和第j列。 因此,如果您只想保留數據框和所有列的某些行,則可以使用類似矩陣的表示法: DF[row.indices, ]

我不明白你的目標是要刪除包含至少一個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM