首页 > 解决方案 > 按平均值组合 R 中的多个数据帧(混合数据类型)

问题描述

我已经对此进行了一些研究(herehere),但我还没有找到我真正想要实现的目标。我找到的最接近我正在寻找的内容是here,但代码似乎无法正常工作或无法满足我的要求。此外,我发现它rbindlist已被弃用bind_rows,但我无法使用它bind_rows来实现我想要的。

我有一个包含 30 个数据框的列表,每个数据框具有相同的行数和列数,以及相同的列数据类型(尽管每列可以是连续的和分类的)。我想将它们合并到具有相同行数和列数的单个数据框中,但每个单元格作为数据框列表中相应 30 个单元格的平均值/中值/多数投票,用于连续、整数和分类列,分别。这是一个包含三个数据框的示例:

df 1:

A       B       C
2.3     5       3
12      3       1
0.4     13      2


df_2:

A       B       C
4.3     23      1
1       7       2
0.4     10      2

df_3:

A       B       C
1.3      3      3
2.2      4      2
12.4     10     1

结果数据框将类似于:

df_result:

A       B        C
2.63     5       3
5.06     4       2
4.4     10       2

任何有关组合每种数据类型的更合适方式的指导也将受到高度赞赏。

标签: rdataframe

解决方案


在你的桌子上放一个 ROW ID

df_1 <- read_table("A       B       C
2.3     5       3
12      3       1
0.4     13      2") %>% 
  rowid_to_column("ROW") 


df_2 <- read_table("A       B       C
4.3     23      1
1       7       2
0.4     10      2") %>% 
  rowid_to_column("ROW") 

df_3 <- read_table("A       B       C
1.3      3      3
2.2      4      2
12.4     10     1") %>% 
  rowid_to_column("ROW")

将它们组合成一个整体

ensamb <- bind_rows(df_1, df_2, df_3)

group_by行,然后用自己的方法总结每一个

ensamb %>% 
  group_by(ROW) %>% 
  summarise(A = mean(A), B = median(B), 
            C = C[which.max(C)])


# A tibble: 3 x 4
    ROW     A     B     C
  <int> <dbl> <dbl> <dbl>
1     1  2.63     5     3
2     2  5.07     4     2
3     3  4.4     10     2

推荐阅读