加入两个表格时,在R中获得加权平均值

时间:2018-03-01 01:30:08

标签: r join weighted-average

我只是提前为这个问题感到困惑和/或愚蠢而道歉。我是R的新手,但由于项目限制较大,我目前不得不将它用于此任务。

现在我有两个我想加入的表,RMS1和RMS2。 RMS1更大,我只想从RMS2(左连接)中携带匹配列。在大多数情况下,RMS1和RMS2是单独的数据集,每个条目都有唯一的ID,但是这两个表之间有一些重叠的ID,在这种情况下,我想得到它们共享的列的加权平均值我加入时的共同点。

例如,我在两个表中都有列(ID,sev1,freq1,score1,count1),如果两个表中有两个相同的ID,则计数将不同,所以我想要一个新表基于计数的sev1,freq1和score1的加权平均值。

我发现这个old question我可能会为我工作,但因为我需要做13 * 3次这个计算,而且我对R中的矢量没有任何经验,我想我会问看看是否有更有效的方法来获得我想要的东西。

基本上,在一天结束时,我希望创建一个包含与RMS1完全相同的列的新表,但是如果需要,可以使用sev1,freq1,score1等加权平均值。

编辑:我的不好,看起来我想要一个完整的加入。然而,在这个问题的背景下并不重要,我假设我可以稍后调整这种连接,我只需要知道如何进行加权平均。 我想更明确一点,我会写一个简化的表格示例:

RMS1:   id  freq1   sev1    score1  count1
        W123    1   5   3   40
        F456    2   2   4   55
        Y789    0   3   6   25

  RMS2: id  freq1   sev1    score1  count1
        S012    3   3   6   25
        Y789    3   0   3   50

Joined: id      freq1   sev1    score1  
        W123    1   5   3   
        F456    2   2   4   
        Y789    2*  1*  4*  
        S012    3   3   6

因此,已加星标的值是ID Y789(计数加权)的加权平均值,因为它出现在两个RMS表中。否则我只从两个表中获取原始值。希望这可以帮助。再次,对所有这些都是新手,抱歉格式不好。

1 个答案:

答案 0 :(得分:0)

使用的解决方案。我们可以按行组合两个数据帧,然后按每个id计算加权平均值。如果您可以使用as.data.frame()

,则不需要最后tibble
library(dplyr)

Joined <- bind_rows(RMS1, RMS2) %>%
  group_by(id) %>%
  summarise_at(vars(-count1), funs(weighted.mean(., count1))) %>%
  as.data.frame()
Joined
#     id freq1 sev1 score1
# 1 F456     2    2      4
# 2 S012     3    3      6
# 3 W123     1    5      3
# 4 Y789     2    1      4

数据

RMS1 <- read.table(text = "id  freq1 sev1 score1 count1
        W123    1   5   3   40
        F456    2   2   4   55
        Y789    0   3   6   25",
                   header = TRUE, stringsAsFactors = FALSE)

RMS2 <- read.table(text = "id  freq1 sev1 score1 count1
        S012    3   3   6   25
        Y789    3   0   3   50",
                   header = TRUE, stringsAsFactors = FALSE)