有条件的分割和聚合

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

请考虑以下数据框:

d <- data.frame(a = c("01","02"),
                b = c(100,200),
                c = c(200,400))

以及以下数据框:

agg <- data.frame(d = c("01","01","02","02"),
                  e = c("V1","V2","V1","V3"))

我想使用a更改d中的agg列。也就是说,如果a = 01,则应将其更改为V1,依此类推。但是,在某些情况下,a中的某些de中的agg中会使用多个名称。例如,0102都进入V1。在这种情况下,我想计算平均值。也就是说,我希望我的最终数据集是这样的:

    a   b    c    
1   V1  150  300
2   V2  100  200
3   V3  200  400

可以看出,V10102的平均值。

如何在R中做到这一点?

r aggregate division
1个回答
2
投票

厌倦了旧的R答案。如评论:

[基本逻辑将在agg$dd$a上进行合并/合并-然后在合并后按e聚合结果。

aggregate(cbind(b,c) ~ e, data=merge(agg, d, by.x="d", by.y="a"), FUN=mean)
#   e   b   c
#1 V1 150 300
#2 V2 100 200
#3 V3 200 400

dplyr世界中,同样适用:

agg %>% 
  left_join(d, by=c("d"="a")) %>%
  select(-d) %>%
  group_by(e) %>%
  summarise_all(list(mean))
## A tibble: 3 x 3
#  e         b     c
#  <fct> <dbl> <dbl>
#1 V1      150   300
#2 V2      100   200
#3 V3      200   400
© www.soinside.com 2019 - 2024. All rights reserved.