选择具有特定条件的id并测量R中这些ID的平均值

时间:2016-11-19 08:27:33

标签: r dataframe

我希望选择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

2 个答案:

答案 0 :(得分:2)

data.frame转换为data.tablesetDT(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