Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在r中重新排列和聚集_R_Aggregate - Fatal编程技术网

在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