如题,大致意思如下,把数据中的 value1 value2 两列按照 education 列的两个类型相加合并。

# 合并前长这样
education   age   value1   value2
未上过学   15   1   2
学前教育   15   1   2

# 合并后长这样
education   age   value1   value2
未上过学   15   2   4

编造的数据如下:

# 合并前
data1 <- data.table(
  education = c(rep('未上过学', 35), rep('学前教育', 35)),
  age = rep(c(15:49), 2),
  value1 = rep(1, 70),
  value2 = rep(2, 70)
)

# 合并后
data2 <- data.table(
  education = rep('未上过学', 35),
  age = c(15:49),
  value1 = rep(2, 35),
  value2 = rep(4, 35)
)

啥?在这个编造的数据里,其实是把相同age的记录的value1,value2求和,然后根本不管education列是什么内容吧?

    fenguoerbian
    在这个编造的数据里,确实只是这样。这是因为本楼主把问题简化了,实际问题中还是要看下 education 那列,要将不同的情况合并,比如将未上过学和学前教育合并为未上过学,将硕士研究生和博士研究生合并为研究生。

      yuanfan
      其实你再加一个两列的数据集,和原来的data merge之后,再根据新的分组变量汇总就可以了

      data3 <- data.table(
          education = c('未上过学', '学前教育', '硕士研究生', '博士研究生'),
          education_group = c('未上过学', '未上过学', '研究生', '研究生')
      )
      library(dplyr)
      data1 %>% 
        mutate(
          education = factor(
            education,
            levels = c('未上过学', '学前教育', '硕士研究生', '博士研究生'),
            labels = c('未上过学', '未上过学', '研究生', '研究生')
          )
        ) %>% 
        group_by(education, age) %>% 
        summarise(
          value1 = sum(value1),
          value2 = sum(value2),
          .groups = "drop"
        )
      data1 <- data.frame(
        education = c('未上过学', '学前教育', '硕士研究生', '博士研究生', '未上过学', '学前教育', '硕士研究生', '博士研究生'),
        value1 = rnorm(8),
        value2 = rnorm(8)
      )
      
      education2 <- factor(
            data1$education,
            levels = c('未上过学', '学前教育', '硕士研究生', '博士研究生'),
            labels = c('未上过学', '未上过学', '研究生', '研究生')
          )
      
      aggregate(data1[, c("value1", "value2")], list(education2=education2), sum)