将相同组合因子水平的数字向量添加到数据帧

时间:2017-10-17 16:39:02

标签: r

我需要知道某个因子中有多少级别具有数据框中其他因素的唯一级别列表。换句话说,对于这些数据,有多少站点有crop1与有多少站点有crop2,然后有多少站点有一个广告上的crop1。无穷。我想要每个交互级别的数字(没有交互/只有作物,庄稼*土壤)如果我只想一次回答一个问题,那么aggregate这很容易。但是,有九个因素,找到这些数字变得相当繁琐,然后将这些数据合并回数据帧,如下所示。

df <- data.frame(crop = c(1,1,2,2,2,2,2,2,2,1),
                 site=c(LETTERS[1:7],"A","A","A"),
                 soil=c('a','a','b','b','b','c','c','c','c','c'))

添加具有相同作物,相同土壤,相同作物x土壤的网站数量

#... 1st for crop
f<-(unique(df[c("site","crop")]))
f<-(aggregate(numeric(nrow(f)), f[c("crop")], length))
names(f)[names(f)=="x"]<-"sites_w_same_cr"
df<-merge(df,f,by="crop")
#..2nd for soil
f<-(unique(df[c("site","soil")]))
f<-(aggregate(numeric(nrow(f)), f[c("soil")], length))
names(f)[names(f)=="x"]<-"sites_w_same_sl"
df<-merge(df,f,by="soil")
#..3rd for soil*crop
f<-(unique(df[c("site","crop","soil")]))
f<-(aggregate(numeric(nrow(f)), f[c("crop","soil")], length))
names(f)[names(f)=="x"]<-"sites_w_same_cr.sl"
df<-merge(df,f,by=c("crop","soil"))

我如何继续这样做以获得更多因素,换句话说,答案是&#34;有多少地方种植作物1,在土壤上a,灌溉,接受肥料,......?&#34;在同一日期框架的新列中?我为合并列提供的列名称是为了清晰起见,它们可能只是一些因素的组合,如&#34; crop&#34;,&#34; crop.soil&#34;可以从因素本身生成的等等。 This answer显示了如何一次性获取所有因子的级别,但不显示如何获取每个因素或每个交互的长度。谢谢!

0 个答案:

没有答案