我有一个表,其中包含一个“总计”行,该行对每列的所有先前行进行求和。我想删除总数低于 10 的每一列。在下面的示例中,这意味着删除 B 列和 C 列。
身份证 | A 栏 | B 栏 | C 栏 | D 栏 |
---|---|---|---|---|
A | 5 | 1 | 2 | 10 |
B | 0 | 0 | 3 | 15 |
C | 7 | 1 | 1 | 22 |
总计 | 12 | 2 | 6 | 47 |
我还没有真正尝试过任何东西,因为我根本不熟悉处理 R 中的特定行。提前感谢您的帮助。
您可以
select
列 where
last
值高于 10,如下所示:
library(dplyr)
df %>%
select(where(~ last(.x) > 10))
#> ID A D
#> 1 A 5 10
#> 2 B 0 15
#> 3 C 7 22
#> 4 Total 12 47
创建于 2024-02-19,使用 reprex v2.0.2
使用数据:
df <- read.table(text = "ID A B C D
A 5 1 2 10
B 0 0 3 15
C 7 1 1 22
Total 12 2 6 47
", header = TRUE)
有点复杂,但它有效:
df <- data.frame(ID = c("A", "B", "C"),
A = c(5, 0, 7),
B = c(1, 0, 1),
C = c(2, 3, 1),
D = c(10, 15, 22))
to_drop <- names(which(colSums(df[, c("A", "B", "C", "D")]) < 10))
df[, !names(df) %in% to_drop]
如果您已经有了“总计”行,它会变得更简单:
df[, -which(df[df$ID == "Total", c("A", "B", "C", "D")] < 10)]