我有一个数据框df1
,其中包含17年内397个不同行业以及几个不同出口国家/地区的进口数据。
> head(df1)
year importer exporter imports sic87dd
2300 1991 USA CAN 9.404848e+05 2011
2301 1991 USA CAN 2.259720e+04 2015
2302 1991 USA CAN 5.459608e+02 2021
2303 1991 USA CAN 1.173237e+04 2022
2304 1991 USA CAN 2.483033e+04 2023
2305 1991 USA CAN 5.353975e+00 2024
但是,我想要特定行业和特定年份的所有进口额的总和,无论它们来自何处。 (进口商始终是美国,sic87dd是唯一标识397个行业的代码)
到目前为止,我已经尝试了以下代码,该代码可以正常运行,但是效率低下,并且运行起来很费时间。
sic87dd <- unique(df1$sic87dd)
year <- unique (df1$year)
df2 <- data.frame("sic87dd" = rep(sic87dd, each = 17), "year" = rep(year, 397), imports = rep(0, 6749))
i <- 1
j <- 1
while(i <= nrow(df2)){
while(j <= nrow(df1)){
if((df1$sic87dd[j] == df2$sic87dd[i]) == TRUE & (df1$year[j] == df2$year[i]) == TRUE){
df2$imports[i] <- df2$imports[i] + df1$imports[j]
}
j <- j + 1
}
i <- i + 1
j <- 1
}
有没有更有效的方法?我在这里看到了一些有些相似的问题,并建议使用data.table
包,但我不知道如何使它适合我的情况。
感谢您的帮助。
答案 0 :(得分:0)
使用dplyr
有一个简单的解决方案:
首先,您需要将您的行业字段设置为一个因素(我假设整个字段由4位数字组成):
df1$sic87dd <- as.factor(df1$sic87dd)
接下来,使用group_by
命令和summarise
:
df1 %>%
group_by(sic87dd) %>%
summarise(total_imports = sum(imports))