R - 根据特定行的值删除列

问题描述 投票:0回答:2

我有一个表,其中包含一个“总计”行,该行对每列的所有先前行进行求和。我想删除总数低于 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 中的特定行。提前感谢您的帮助。

r dplyr
2个回答
2
投票

您可以

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)

1
投票

有点复杂,但它有效:

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)]
© www.soinside.com 2019 - 2024. All rights reserved.