dplyr能否避免使用多个合并?

dplyr能否避免使用多个合并?,r,merge,dplyr,R,Merge,Dplyr,下面的数据框“d”有两列PCT1和PCT2。我想为每组绘制加权PCT1和PCT2。这要求: (1) 计算各组的加权pct1和加权pct2。目前,我使用dplyr在两次调用中完成了这项工作 (2) 然后我将这两个结果与rbind()合并 有没有一种方法可以避免调用dplyr两次,并且仍然生成“结果”数据帧?实际上,我有10个专栏,而不是2个专栏,我必须给dplyr打10次电话,然后做一些类似的事情: rbind(PCT1,PCT2,PCT3,PCT4, PCT5, ....,PCT10) 多谢

下面的数据框“d”有两列PCT1和PCT2。我想为每组绘制加权PCT1和PCT2。这要求:

(1) 计算各组的加权pct1和加权pct2。目前,我使用dplyr在两次调用中完成了这项工作 (2) 然后我将这两个结果与rbind()合并

有没有一种方法可以避免调用dplyr两次,并且仍然生成“结果”数据帧?实际上,我有10个专栏,而不是2个专栏,我必须给dplyr打10次电话,然后做一些类似的事情:

 rbind(PCT1,PCT2,PCT3,PCT4, PCT5, ....,PCT10)
多谢各位

   d= data.frame (group =c("A","A","B","B"),
            PCT1 = c(100,50,100,50),
            PCT2 = c(50,1,10,5),
            weight = c(99,1, 100,100))
d

  group PCT1 PCT2 weight
1     A  100   50     99
2     A   50    1      1
3     B  100   10    100
4     B   50    5    100

PCT1  = d %>% group_by(group)  %>%  summarise(vmean =  weighted.mean(PCT1, weight))
PCT1$PCT =1
PCT2  = d %>% group_by(group)  %>%  summarise(vmean =  weighted.mean(PCT2, weight))
PCT2$PCT =2
result = rbind(PCT1, PCT2)
结果

 group vmean PCT
1     A 99.50   1
2     B 75.00   1
3     A 49.51   2
4     B  7.50   2

您只需进一步融化数据帧:

library(dplyr)
library(tidyr)

d <- data.frame (group =c("A","A","B","B"),
                             PCT1 = c(100,50,100,50),
                             PCT2 = c(50,1,10,5),
                             weight = c(99,1, 100,100))

d %>%
    gather(key = PCT_GRP,value = PCT,PCT1:PCT2) %>%
    group_by(group,PCT_GRP) %>%
    summarise(vmean = weighted.mean(PCT,weight))
库(dplyr)
图书馆(tidyr)
d%
聚集(键=PCT\U GRP,值=PCT,PCT1:PCT2)%>%
分组依据(分组,PCT\U GRP)%>%
总结(vmean=加权平均值(PCT,重量))

您只需进一步融化数据帧:

library(dplyr)
library(tidyr)

d <- data.frame (group =c("A","A","B","B"),
                             PCT1 = c(100,50,100,50),
                             PCT2 = c(50,1,10,5),
                             weight = c(99,1, 100,100))

d %>%
    gather(key = PCT_GRP,value = PCT,PCT1:PCT2) %>%
    group_by(group,PCT_GRP) %>%
    summarise(vmean = weighted.mean(PCT,weight))
库(dplyr)
图书馆(tidyr)
d%
聚集(键=PCT\U GRP,值=PCT,PCT1:PCT2)%>%
分组依据(分组,PCT\U GRP)%>%
总结(vmean=加权平均值(PCT,重量))

另一个选项是
数据表

library(data.table)
melt(setDT(d), measure = c("PCT1", "PCT2"), variable.name = "PCT_GRP")[,
        .(vmean = weighted.mean(value, weight)) , .(group, PCT_GRP)]
#   group PCT_GRP vmean
#1:     A    PCT1 99.50
#2:     B    PCT1 75.00
#3:     A    PCT2 49.51
#4:     B    PCT2  7.50

另一个选项是
data.table

library(data.table)
melt(setDT(d), measure = c("PCT1", "PCT2"), variable.name = "PCT_GRP")[,
        .(vmean = weighted.mean(value, weight)) , .(group, PCT_GRP)]
#   group PCT_GRP vmean
#1:     A    PCT1 99.50
#2:     B    PCT1 75.00
#3:     A    PCT2 49.51
#4:     B    PCT2  7.50

当我尝试安装tidyr时,控制台只是暂停,最后打印的消息是:正在尝试URL''内容类型'application/zip'长度789503字节(770 KB)下载770KB@user3022875试着换一个不同的镜子。否则,您的internet连接可能会出现问题。当我尝试安装tidyr时,控制台会暂停,最后打印的消息是:正在尝试URL''内容类型'应用程序/zip'长度789503字节(770 KB)下载770KB@user3022875试着换一个不同的镜子。否则,您的internet连接可能会出现问题。