在连接两个表时获得R中的加权平均值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在连接两个表时获得R中的加权平均值相关的知识,希望对你有一定的参考价值。
我只是提前为这个问题感到困惑和/或愚蠢而道歉。我是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表中。否则我只从两个表中获取原始值。希望这可以帮助。再次,对所有这些都是新的,抱歉格式不好。
使用dplyr的解决方案。我们可以按行组合两个数据帧,然后通过每个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)
以上是关于在连接两个表时获得R中的加权平均值的主要内容,如果未能解决你的问题,请参考以下文章
R语言计算加权平均值:weighted.mean函数计算加权平均值matrixStats包的weightedMean函数计算加权平均值SDMTools包的wt.mean函数计算加权平均值