[英]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.