在纵向数据集中创建新行

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

我有一个 R 纵向数据集,其中包含在多个时间点观察到的多个国家/地区。让我们简化一下事情并考虑以下示例

set.seed(123)
df=data.frame(Country=c(rep("DEU",20),rep("FRA",20),rep("ITA",20)),Year=rep(c(rep(1,5),rep(2,5),rep(3,5),rep(4,5)),3),industry=rep(c("A","B","C","D"),15),h_emp=rnorm(60,15,3.5))

目标是为每个国家和年份创建一个新行,始终在行业列中标记为“C+D”。 h_emp 中的相应单元格应等于该国家/地区在该特定年份的行业“C”和“D”中 h_emp 值的总和。我怎样才能实现这个目标?

r dataframe dataset panel
1个回答
0
投票

使用 dplyr,创建一个汇总 df,包括

C+D
的总和,然后绑定回原始 df。请注意,您的示例数据对于每年/国家/地区的某些行业都有多个条目;我认为这是一个错误,所以我创建了新的示例数据。

set.seed(123)
library(dplyr)

df <- data.frame(
  Country = rep(c("DEU", "FRA", "ITA"), each = 16),
  Year = rep(rep(1:4, each = 4), 3),
  industry = rep(c("A", "B", "C", "D"), 12),
  h_emp = rnorm(48, 15, 3.5)
)

df <- df %>%
  filter(industry %in% c("C", "D")) %>%
  summarize(
    industry = "C+D",
    h_emp = sum(h_emp),
    .by = c(Country, Year)
  ) %>%
  bind_rows(df, .) %>%
  arrange(Country, Year)

结果:

#> head(df, 15)
   Country Year industry    h_emp
1      DEU    1        A 13.03834
2      DEU    1        B 14.19438
3      DEU    1        C 20.45548
4      DEU    1        D 15.24678
5      DEU    1      C+D 35.70226
6      DEU    2        A 15.45251
7      DEU    2        B 21.00273
8      DEU    2        C 16.61321
9      DEU    2        D 10.57229
10     DEU    2      C+D 27.18549
11     DEU    3        A 12.59602
12     DEU    3        B 13.44018
13     DEU    3        C 19.28429
14     DEU    3        D 16.25935
15     DEU    3      C+D 35.54363
© www.soinside.com 2019 - 2024. All rights reserved.