【发布时间】:2021-02-21 18:46:42
【问题描述】:
我有一个超过 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,则应过滤掉该行。
- 如果该行的样本值只有部分返回 NA,则不应删除该行。
- 不应在此过程中删除除样本列之外的其他列,我希望最终得到完全相同的数据框布局,只是某些行仅包含其中删除的所有样本列的 NA 值。**
-> 供参考:在我上面提供的示例数据框中,应删除第 1 行和第 3 行,因为所有样本值都是 NA,尽管 mz 和空白平均值不是。例如,不应删除第 4 行,因为其中一个示例值返回结果且没有 NA。
我已经在 StackOverflow 上注意到了很多关于此的主题,但是经过一天的搜索和尝试,我似乎无法找到与我想要做的完全匹配的主题。如果有人有任何想法,请告诉我!
【问题讨论】:
标签: r dataframe filter dplyr filtering