我希望选择ID并按特定条件取平均值。我想测量所有至少有一次特定因子的ID的平均值
mdf <- data.frame (id =c(1,2,3,2,1,2),
factor= c("a","b","a","a","b" ,"a") , value = c(4,0,5,2,3,6))
id factor value
1 1 a 4
2 2 b 0
3 3 a 5
4 2 a 2
5 1 b 3
6 2 a 6
例如,我想要将b
作为因素的平均ID,id 1和2作为列表中的b
一次,所以'我的代码应该提取id 1的值和id 2并测量它们的平均值(4 + 0 + 2 + 3 + 6)/ 5 = 3.注意id 3从未有b
,因此它被排除在计算之外。
所以我理想的输出将是
factor avg
a 3.33
b 3
答案 0 :(得分:2)
将data.frame
转换为data.table
(setDT(mdf)
)后,我们会循环显示&#39;因子&#39;的unique
元素,按&#39分组;“&#39;”,“{1}} if
的因素&#39;拥有该特定元素,data.table(any
)的子集,获取&#39;值的.SD
&#39;以及mean
&#39;因素&#39;元素为2列&quot; data.table&#39;和unique
rbind
元素。list
library(data.table)
setDT(mdf)
rbindlist(lapply(unique(mdf$factor), function(x) {
x1 <- mdf[, if(any(factor==x)) .SD, id][, .(factor= x, avg=mean(value))]}))
# factor avg
#1: a 3.333333
#2: b 3.000000
答案 1 :(得分:2)
通过基础R的想法,
ECHO OFF
CLS
SET PATH=C:\Users\Leejjon\Applications\Google\CloudSDK\google-cloud-sdk\bin;C:\Program Files\MySQL\MySQL Server 5.7\bin;C:\Program Files\Git\bin;C:\Program Files\Git\cmd;%PATH%;
cd C:\Users\Leejjon\Applications\Google\CloudSDK
ECHO Welcome to the Google Cloud SDK! Run "gcloud -h" to get the list of available commands.
ECHO ---
ECHO ON