[英]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 的新手。我最終用這段代碼刪除了正確的行,但是這個方法也刪除了不是樣本列的列使其工作的過程。
**簡而言之:
-> 供參考:在我上面提供的示例數據幀中,應刪除第 1 行和第 3 行,因為所有樣本值都是 NA,盡管 mz 和空白平均值不是。 例如,不應刪除第 4 行,因為其中一個樣本值返回結果而沒有 NA。
我已經在 StackOverflow 上注意到了很多關於此的主題,但是經過一天的搜索和嘗試,我似乎無法找到與我想要做的完全匹配的主題。 如果有人有任何想法,請告訴我!
我們可以用
df1[!rowSums(!is.na(df1[sample_cols])),]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.