如果我理解你的問題正確,這裏是我下面嘗試:
sp <-
c("dog","dog","dog","cat","cat","cat","cat","cat","dog","bird","bird",
"bird","rabb","rabb","rabb","rabb")
rd <-
c("uniq","uniq","for","uniq","uniq","mains","mains","mains",
"for","mac","mac","mac","lol","lol","lol","lol")
pH <-
c(4.5,4.2,6.1,7.0,4.9,3.1,6.5,6.5,NA,5.0,4.1,5.1,5.0,4.2,6.0,2.8)
abund <-
c(5,5,3,8,5,9,1,3,2,3,5,NA,8,5,2,3)
area <-
c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2)
point <-
c("a","a","a","a","a","b","b","b","a","a","a","a","b","b","b","b")
df <- data.frame(sp,rd,pH,abund,area,point)
cols <-c("area","point")
df$group <- apply(df[,cols],1,paste,collapse="")
df$group <- as.factor(df$group)
str(df$group)
sapply(split(df$abund,df$group),mean,na.rm=TRUE)
讓我知道
1a 1b 2a 2b
5.200000 4.333333 3.333333 4.500000
下面是一個選擇,如果有人不希望拆分數據幀。這裏的數據框架的樣子,現在在此基礎上一步
df$group <- apply(df[,cols],1,paste,collapse="")
df
sp rd pH abund area point group
1 dog uniq 4.5 5 1 a 1a
2 dog uniq 4.2 5 1 a 1a
3 dog for 6.1 3 1 a 1a
4 cat uniq 7.0 8 1 a 1a
5 cat uniq 4.9 5 1 a 1a
6 cat mains 3.1 9 1 b 1b
7 cat mains 6.5 1 1 b 1b
8 cat mains 6.5 3 1 b 1b
9 dog for NA 2 2 a 2a
10 bird mac 5.0 3 2 a 2a
11 bird mac 4.1 5 2 a 2a
12 bird mac 5.1 NA 2 a 2a
13 rabb lol 5.0 8 2 b 2b
14 rabb lol 4.2 5 2 b 2b
15 rabb lol 6.0 2 2 b 2b
16 rabb lol 2.8 3 2 b 2b
現在如果你想按組劃分:
df1a <- df[grepl("1a",df$group),]
df1a
sp rd pH abund area point group
1 dog uniq 4.5 5 1 a 1a
2 dog uniq 4.2 5 1 a 1a
3 dog for 6.1 3 1 a 1a
4 cat uniq 7.0 8 1 a 1a
5 cat uniq 4.9 5 1 a 1a
'library(data.table); setDT(DF)[,{DO STUFF HERE},by =。(area,point)]'這個庫的介紹材料可以在這裏找到:https://github.com/Rdatatable/data.table/wiki/Getting-開始 – Frank
'變換(DF,mean_abund = ave(abund,area,point))''。或者可能是'彙總(丰度〜面積+點,DF,平均值)',這取決於你想要什麼。 –
爲什麼不把'sprintf(「%i%s」,df $ area,df $ point)'成一個新的列,然後是'group_by'? –