Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.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_Sum_Dataframe_Aggregate_Subtotal - Fatal编程技术网

R 使用多因子(字符)变量在数据框中聚合(小计)

R 使用多因子(字符)变量在数据框中聚合(小计),r,sum,dataframe,aggregate,subtotal,R,Sum,Dataframe,Aggregate,Subtotal,我有一个表(data.frame),其中包含数字数据和因子数据,其中有几个是字符变量(例如“物种”、“Fam_name”、“gear”),我想计算每个“ss”的“重量”和“数量”变量的小计(总和) 我尝试使用“聚合”函数,但未能使其返回“齿轮”变量的字符值 下面是我的桌子头 survey station ss species weight number bdep lon lat Sci_name F

我有一个表(data.frame),其中包含数字数据和因子数据,其中有几个是字符变量(例如“物种”、“Fam_name”、“gear”),我想计算每个“ss”的“重量”和“数量”变量的小计(总和)

我尝试使用“聚合”函数,但未能使其返回“齿轮”变量的字符值

下面是我的桌子头

   survey station         ss species weight number bdep      lon      lat                       Sci_name       Fam_name gear
1 2012901       1 2012901001 CARSC04  11.20     20   23 37.61650 19.14900        Scomberoides lysan     CARANGIDAE   TB
2 2012901       1 2012901001 SCMGR02   0.98      2   23 37.61650 19.14900 Grammatorcynus bilineatus     SCOMBRIDAE   TB
3 2012901       2 2012901002 NOCATCH   0.00      0    6 38.48333 18.71667                  NO CATCH       NO CATCH   TB
4 2012901       3 2012901003 LUTLU06   5.65      1    6 38.48333 18.71667            Lutjanus bohar     LUTJANIDAE   TB
5 2012901       3 2012901003 SHACAB1   4.00      1    6 38.48333 18.71667         Triaenodon obesus CARCHARHINIDAE   TB
6 2012901       4 2012901004 NOCATCH   0.00      0    9 38.48333 18.71667                  NO CATCH       NO CATCH   TB
我尝试使用下面的代码,目的是使用bind将两者结合起来

catch1<-aggregate(cbind(weight, number) ~ ss, data = catch, FUN = sum) 

catch2<-aggregate(cbind(survey, station, bdep, lon, lat, gear) ~ ss, data = catch, FUN=median) 

catch1您的问题是
gear
是一个因子,因此
median
返回因子数值的中值。尝试:

catch2$gear <- factor(levels(catch$gear)[catch2$gear], levels=levels(catch$gear))

catch2$gear我假设对于给定的
ss
,可能有两种
gear
。在这种情况下,问题归结为找到字符变量的中间值(或模式)。以下是查找字符变量模式的代码(此处
gear


我建议您仅为gear和ss提供一个稍大的示例数据集,如果这是导致问题的唯一两个变量。还可以根据更大的示例数据集提供您想要的答案。'gear'只是上面代码中的一个示例-我试图在所有因子信息就绪的情况下,为每个'ss'输出一行。我可以提供更大的数据集,但我包含的标题是一个很好的示例,因为对于'ss'=2012901001和2012901003,有两行数据。+1。当我试图解决这个问题时,我假设在一个
ss
中有两种
gear
是可能的,并且我尝试的任何东西都不起作用,至少如果有四行数据,两行有一种
gear
类型,两行有另一种类型。马克:很抱歉造成混淆。每个“ss”只有一种“装备”。@ErikJS没问题。我为一个
ss
中可能存在多种
gear
的场景添加了一个答案。
catch2$gear <- factor(levels(catch$gear)[catch2$gear], levels=levels(catch$gear))
catch <- read.table(text = '
         ss  gear
          1    AA
          1    AA
          1    BB
          1    BB
          2    CC
          2    CC
          2    CC
          3    BB
          4    AA
          4    CC
', header = TRUE)

gear.mode <- tapply(catch$gear, catch$ss, function(x) { y = table(x) ; names(y)[y==max(y)] })
gear.mode <- as.data.frame(gear.mode)
gear.mode

  gear.mode
1    AA, BB
2        CC
3        BB
4    AA, CC
aggregate(gear ~ ss, data = catch, FUN = function (x) {
   y = table(x) ; names(y)[y==max(y)] 
})

  ss   gear
1  1 AA, BB
2  2     CC
3  3     BB
4  4 AA, CC