使用列表对 R 中的数据帧求和

Using list to sum a dataframe in R

考虑 R 中的以下数据框:

df <- data.frame(Industry = c("Agriculture", "Fishery", "Industry"),
                 Value    = c(10,20,30))

假设我想对“农业”和“渔业”的值求和 (10 + 20 = 30)。例如,我可以这样做:

df$Value[df$Industry == "Agriculture"] + df$Value[df$Industry == "Fishery"]

但是,我想创建包含“农业”和“渔业”的列表,然后对值求和。因为在我的示例中,我有一个很大的 data.frame,这将使它变得容易得多。怎么做?

您可以使用 %in%:

df <- data.frame(Industry = c("Agriculture", "Fishery", "Industry"),
                 Value    = c(10, 20, 30))
print(df)
industries_to_sum <- c("Agriculture", "Fishery")
print(sum(df[df$Industry %in% industries_to_sum,]$Value))

输出:

     Industry Value
1 Agriculture    10
2     Fishery    20
3    Industry    30
[1] 30

一种data.table()方法

library(data.table)

DT <- data.table(Industry = c("Agriculture", "Fishery", "Industry"),
                 Value    = c(10,20,30))

DT[Industry != "Industry"][, sum(Value)]

输出

> [1] 30

为了完整起见,采用 tidyverse 方法:

df <- data.frame(Industry = c("Agriculture", "Fishery", "Industry"),
                 Value    = c(10, 20, 30))
df %>% filter(Industry %in% c("Agriculture", "Fishery")) %>%
    summarise(sumValue=sum(Value))

输出:

  sumValue
1       30