【发布时间】: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)))