因子水平的所有组合的综合值,包括缺失的因子
问题描述:
我试图找到基于多列的数据帧的最小值。我能够使用下面的聚合函数成功地完成此操作。但是,结果不包含输入数据框中没有数据的因素组合。因子水平的所有组合的综合值,包括缺失的因子
我已经有了:
# all possibilities of fruits, cities, and vegetables:
fruits<-c('apple','banana','grape')
cities<-c('new york','chicago','los angeles')
vegetables<-c('cucumber','mushroom')
#my input (ie, a sample from a test:
inputdf<-data.frame(fruit=c('apple','apple','apple','banana','banana','banana','grape','grape','grape'),city=c('new york','new york','new york','new york','chicago','los angeles','chicago','chicago','chicago'),vegetable=c('cucumber','cucumber','mushroom','cucumber','mushroom','mushroom','cucumber','cucumber','cucumber'),value=c(5,3,4,6,5,7,2,7,4))
#my aggregation:
outdf<-aggregate(value ~ fruit + city + vegetable,inputdf,function(x) min(x))
我得到的输出是:
fruit city vegetable value
grape chicago cucumber 2
apple new york cucumber 3
banana new york cucumber 6
banana chicago mushroom 5
banana los angeles mushroom 7
apple new york mushroom 4
这是正确的,但是,我也想对应的列是didnt组合的行在输入df存在:
fruit city vegetable value
apple new york cucumber 3
apple new york mushroom 4
apple chicago cucumber NA
apple chicago mushroom NA
apple los angeles cucumber NA
apple los angeles mushroom NA
banana new york cucumber 6
banana new york mushroom NA
banana chicago cucumber NA
banana chicago mushroom 5
banana los angeles cucumber NA
banana los angeles mushroom 7
grape new york cucumber NA
grape new york mushroom NA
grape chicago cucumber 2
grape chicago mushroom NA
grape los angeles cucumber NA
grape los angeles mushroom NA
我希望能够做到这一点的任何数量的列上,其中吨o结合。有没有简单的方法来做到这一点?我想要输出的原因是因为我需要将NA转换为特定值并再次在相同子集上平均这些值。谢谢!
答
可以使用expand.grid
生成所有组合,然后利用merge
:
outdf<-aggregate(value ~ fruit + city + vegetable,inputdf,function(x) min(x))
DF=expand.grid(fruits, cities, vegetables)
outdf=merge(outdf,DF,by.x=c('fruit','city','vegetable'),by.y=c('Var1','Var2','Var3'),all.y=T)
> outdf
fruit city vegetable value
1 apple chicago cucumber NA
2 apple chicago mushroom NA
3 apple los angeles cucumber NA
4 apple los angeles mushroom NA
5 apple new york cucumber 3
6 apple new york mushroom 4
7 banana chicago cucumber NA
8 banana chicago mushroom 5
9 banana los angeles cucumber NA
10 banana los angeles mushroom 7
11 banana new york cucumber 6
12 banana new york mushroom NA
13 grape chicago cucumber 2
14 grape chicago mushroom NA
15 grape los angeles cucumber NA
16 grape los angeles mushroom NA
17 grape new york cucumber NA
18 grape new york mushroom NA
完美。谢谢! – Joe
@Joe,很高兴帮助,美好的一天 – Wen