我想知道如何從數據框中刪除少於(假設爲5)非零條目的行。R:刪除行數小於某個閾值的非零值
我來最接近的是:
length(which(df[1,] > 0)) >= 5
但如何將其應用到整個數據幀丟棄是假的人?是否有一個函數類似於excel中的COUNTIF()函數,我可以在這裏應用?
謝謝你的幫助。
我想知道如何從數據框中刪除少於(假設爲5)非零條目的行。R:刪除行數小於某個閾值的非零值
我來最接近的是:
length(which(df[1,] > 0)) >= 5
但如何將其應用到整個數據幀丟棄是假的人?是否有一個函數類似於excel中的COUNTIF()函數,我可以在這裏應用?
謝謝你的幫助。
可以在rowSums
和[
使用布爾值:
df[ rowSums(df > 0) >= 5, ]
有隱藏在這個表達式3個步驟:
df > 0
產生一個矩陣具有值TRUE其中元件> 0rowSums
返回每行的非零元素的數目(當它將TRUE值設爲1並將FALSE值設爲0時)[
僅選擇線,其中的非零元素的數量> = 5也可以使用一個for循環。
我們首先創建一個零和一個矩陣來測試我們的代碼。第2行必須被排除,因爲它具有少於5個非零值。
在循環中,我們計算每行非零值的數量,如果小於5則爲TRUE,否則爲FALSE。名爲'drop'的向量包含哪些行爲TRUE,然後FALSE的信息。在最後一步中,我們排除那些drop == TRUE的行。
mat <- matrix(c(1,1,1,1,0,1,1,1,1,1,1,1,1,1,1), nrow=3, ncol=5)
mat
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 1 1 1
[2,] 1 0 1 1 1
[3,] 1 1 1 1 1
drop <- NULL
for(i in 1:NROW(mat)){
count.non.zero <- sum(mat[i,]!=0, na.rm=TRUE)
drop <- c(drop, count.non.zero<5)
}
mat[!drop==TRUE,]
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 1 1 1
[2,] 1 1 1 1 1
注意:na.rm==TRUE
允許此腳本在您的數據包含缺失值時工作。
你的意思是'> ='而不是'=>'對嗎? – SabDeM