使用列表对 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
考虑 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