簡體   English   中英

如果所選列中的所有值都返回 NA 作為結果,則刪除數據框中的行

[英]Remove rows in a dataframe if ALL values in a selection of columns returns NA as result

我有一個超過 122000 行和 60 列的大型數據框,但簡化后的數據框如下所示:

structure(list(mz = c(40, 50, 60, 70, 80, 90), 
`sample 1` = c(NA, 51, NA, NA, 675, 12), 
`sample 2` = c(NA, 51, NA, NA, 2424, 5),
`Sample 3` = c(NA, 51, NA, 300, 1241, NA), 
`Blank Average` = c(10, 20, 50, 78, NA, 0.00333333),
row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"))

我想要做什么:我想要我正在編寫的函數,以創建一個新的數據框,在其中刪除一行,以防 ALL SAMPLE COLUMNS 返回 NA。

我首先嘗試對整個示例列進行子集化:

sample_cols <- grep("sample", names(dataframe),ignore.case = TRUE)

為了在僅這些子集樣本列全部返回 NA 時連續刪除行,我試過:na_omit -> 這不起作用,因為這會刪除行,但也會刪除只有一個值 NA 的行,而不是該行中的所有值樣品。

我也試過:

 Sample_cols_df<- dataframe[sample_cols] #Sample_cols are all the sample columns
  Row_filtered<-Sample_cols_df[rowSums(is.na(Sample_cols_df)) != ncol(Sample_cols_df),

但是我不太了解這個解決方案,因為我不熟悉 rowSums 並且還是 R 的新手。我最終用這段代碼刪除了正確的行,但是這個方法也刪除了不是樣本列的列使其工作的過程。

**簡而言之:

  • 我需要對樣本列進行子集化,如果所有樣本列都是 NA,則應過濾掉該行。
  • 如果該行的樣本值中只有 PART 返回 NA,則不應刪除該行。
  • 除了示例列之外的其他列不應在此過程中被刪除,我希望最終得到完全相同的數據框布局,只是某些行僅包含其中刪除的所有示例列的 NA 值。**

-> 供參考:在我上面提供的示例數據幀中,應刪除第 1 行和第 3 行,因為所有樣本值都是 NA,盡管 mz 和空白平均值不是。 例如,不應刪除第 4 行,因為其中一個樣本值返回結果而沒有 NA。

我已經在 StackOverflow 上注意到了很多關於此的主題,但是經過一天的搜索和嘗試,我似乎無法找到與我想要做的完全匹配的主題。 如果有人有任何想法,請告訴我!

我們可以用

df1[!rowSums(!is.na(df1[sample_cols])),]

暫無
暫無

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

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