在r中重新排列和聚集
我有以下数据在r中重新排列和聚集,r,aggregate,R,Aggregate,我有以下数据 > site<-c("A","A","A","B","B","C") > sample<-c("N","N","N","W","W","S") > effort<-c(2,2,2,1,1,3) > y<-c(1,0,1,1,0,1) > df<-data.frame(site,sample,effort,y) > df site sample effort y 1 A
> site<-c("A","A","A","B","B","C")
> sample<-c("N","N","N","W","W","S")
> effort<-c(2,2,2,1,1,3)
> y<-c(1,0,1,1,0,1)
> df<-data.frame(site,sample,effort,y)
> df
site sample effort y
1 A N 2 1
2 A N 2 0
3 A N 2 1
4 B W 1 1
5 B W 1 0
6 C S 3 1
我尝试了以下代码
tr<-aggregate(.~site+sample,data=df, FUN=function(df) c(m=min(df), n=length(df)))
> tr
site sample effort.m effort.n y.m y.n
1 A N 2 3 0 3
2 C S 3 1 1 1
3 B W 1 2 0 2
tr
现场样本工作量.m工作量.n y.m y.n
1 A N 2 3 0 3
2 C S 3 1 1
3 B W 1 2 0 2
这几乎就是我想要的,但是有没有更好的方法来做到这一点,我应该如何处理数据中的零?使用
plyr
require(plyr)
ddply(df, c("site", "sample"), summarize,
min_eff = min(effort), sum_y = sum(y))
site sample min_eff sum_y
1 A N 2 2
2 B W 1 1
3 C S 3 1
在您的示例中,站点和样本之间存在一对一的对应关系。这种方法适用于每一对不同的组合。至于
我应该如何处理数据中的零
你想怎么对付他们?您担心什么?使用功能强大的
dplyr
软件包回答
library(dplyr)
df %.%
group_by(site,sample) %.%
select(site, sample) %.%
summarise (
mineff = min(effort),
y = sum(y))
site sample mineff y
1 C S 3 1
2 A N 2 2
3 B W 1 1
太好了,谢谢你。我想提高投票率,但似乎无法提高投票率,因为这是我的第一个问题。以前,当我尝试对“y”求和时,我得到的是一个包括零在内的总数,但这种方法正是我想要的。@user3348711您很快就能提高投票率。也请查看其他答案,如果您满意,请单击旁边的复选标记,将其中一个标记为“已接受”。这样人们就会知道你还没有等待更多的答案。@user3348711,并将
plyr
解决方案与dplyr
解决方案进行比较,注意两者的相似之处,软件包的作者相同,但dplyr
更新更快(在大数据集上很明显)。
library(dplyr)
df %.%
group_by(site,sample) %.%
select(site, sample) %.%
summarise (
mineff = min(effort),
y = sum(y))
site sample mineff y
1 C S 3 1
2 A N 2 2
3 B W 1 1