我有数据框" d"下面有2列PCT1和PCT2。我想为每组绘制加权的PCT1和PCT2。这要求:
(1)计算每组的加权pct1和加权pct2。目前我正在使用dplyr进行两次调用 (2)然后我将2个结果与rbind()
合并有没有办法避免两次调用dplyr并仍然产生"结果"数据框架?实际上我有10列不是2,我必须调用dplyr 10次,并执行以下操作:
initAudioPlayer();
function initAudioPlayer(){
var audio = new Audio();
var aContainer = document.getElementById('listenlagu');
// assign the audio src
audio.src = aContainer.querySelectorAll('source')[0].getAttribute('src');
audio.load();
audio.loop = true;
audio.play();
// Set object references
var playbtn = document.getElementById("play_btn");
// Add Event Handling
playbtn.addEventListener("click", playPause(audio, playbtn));
}
// Functions
function playPause(audio, playbtn){
return function () {
if(audio.paused){
audio.play();
playbtn.style.background = "url(images/pause70.png) no-repeat";
} else {
audio.pause();
playbtn.style.background = "url(images/play70.png) no-repeat";
}
}
}
谢谢。
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)
答案 0 :(得分:3)
您只需要进一步融化数据框:
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))
答案 1 :(得分:1)
另一个选项是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