【问题标题】:R How to remove every row that is NA all the way across (excluding one column in consideration)R 如何删除所有 NA 的每一行(不包括考虑中的一列)
【发布时间】:2023-01-30 23:23:15
【问题描述】:

这是我的数据框。

structure(list(Residuals = c(397.719118414563, -10246.4427090485, 
-3982.02702212869, -240947.051443981, 250986.48264821, 43320.9935898291, 
96870.2808591849, 8952.76992257161, -63450.0579663758, 24376.086470815, 
13104.1233332573, 135747.999116926, 25764.7616432277, 37854.5718107639, 
27894.6215442242, 50954.1466486423, 67044.0312502857, -19118.4739531731, 
346171.159517263, 561875.165843992, 193115.942620075, 33888.5002828395, 
-35650.3700171156, 120686.123926977, 524542.293275104, 197536.265415269, 
1097.09476727468), `30%_OFF` = c("30% OFF", NA, "30% OFF", NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "30% OFF", NA, "30% OFF", 
"30% OFF", NA, NA, NA, NA, NA, NA, NA, NA, NA), `25%_OFF` = c(NA, 
"25% OFF", NA, NA, NA, NA, NA, NA, "25% OFF", NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, "25% OFF", NA, NA, NA, NA, NA
), `2_for_1_Bundle_Deal` = c(NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "2 for Bundle Deal", 
NA, NA, "2 for Bundle Deal", NA), BOGO = c(NA, NA, NA, "BOGO", 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, "BOGO", NA, "BOGO"), B2G1 = c(NA, NA, NA, NA, 
NA, NA, NA, "B2G1", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, "B2G1", NA, NA, NA)), row.names = c(NA, -27L), class = c("tbl_df", 
"tbl", "data.frame"))

我想弄清楚如何删除所有 NA 的行。它必须在要删除的每一列中都是NA。我一直在阅读其他通过几种方法进行的帖子:na.omit()complete.cases()rowSums()drop_na()

问题是,我试图从任何考虑中排除 Residuals 列。 Residuals 列永远不会是 NA。因此,除了 Residuals 列之外,我需要删除每一列的所有 NA 行。

我也无法删除 Residuals 列,然后执行一个考虑每一列的操作,并想重新添加 Residuals 列——因为我无法将数据框加入或索引回来自 Residuals 的值,如果是这样的话,那么它就是一个唯一标识符。

最后一件事 - 我还需要一个不像的方法:

filter(is.na(x == "50%_OFF" $ x == "40%_OFF" ...))

因为,从以前的代码来看,这些列的确切名称不一致,所以我正在寻找一种可能引用 Residuals 列但不能按名称调用其他列的方法。

【问题讨论】:

  • dat |> filter(!if_all(.cols = !contains("残差"), ~is.na(.x)))

标签: r na


【解决方案1】:

以下是如何删除除“残差”列以外的所有列中为 NA 的行:

df[rowSums(is.na(df[,-1])) == 0,]

rowSums 函数计算除第一列 (df[,-1]) 之外的所有列的每一行中的 NA 值总和。如果总和等于 0 (== 0),则表示该行在所有列中都不为 NA。生成的数据框将仅包含 rowSums 等于 0 的行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2019-11-14
    • 2014-03-16
    • 1970-01-01
    • 2012-10-12
    相关资源
    最近更新 更多