如何基于多个组聚合和平均各种行,同时保持其他列不变

鱼腥味

我花了几个小时试图弄清楚如何做到这一点,但我不确定最好的方法是什么。我有物种和环境数据,每个站点(每个特定的日期和月份)有 2 个重复,并且想结合在每个特定站点、月份和日期的“S”和“E”拖曳处收集的数据。我正在做一些分析,并希望将“S”和“E”拖车组合起来,因此每个站点中的两个拖车只有一行数据(按天和月)。我不确定如何很好地口头解释这一点,所以我将尝试举一个例子来更好地解释自己。

这是我的数据的缩短版本:

structure(list(month = c("11", "11", "11", "11", "11", "11", 
"7", "7", "7", "7", "7", "7", "8", "8", "8", "8"), day = c("4", 
"4", "4", "4", "5", "5", "20", "20", "27", "27", "27", "27", 
"16", "16", "16", "16"), Site = c(11L, 11L, 6L, 6L, 9L, 9L, 10L, 
10L, 13L, 13L, 2L, 3L, 4L, 5L, 5L, 6L), Tow = c("E", "S", "E", 
"S", "E", "S", "E", "S", "E", "S", "S", "S", "S", "E", "S", "E"
), Depth = c(10L, 11L, 22L, 22L, 12L, 13L, 13L, 13L, 19L, 19L, 
14L, 21L, 22L, 22L, 22L, 22L), Temp = c(12.75, 12.9, 14.25, 14.239, 
12.975, 12.955, 23.804, 23.804, 23.89, 23.9, 24.41, 24.04, 23.915, 
23.988, 24.021, 23.957), DO_mgL = c(10.54, 10.45, 10.16, 10.12, 
10.4, 10.39, 7.24, 7.11, 8.07, 8.1, 9.14, 1.29, 2.44, 2.45, 2.48, 
2.54), secchi = c(1.25, 1.25, 2.25, 2.25, 1.5, 1.5, 2.7, 2.7, 
2.1, 2.1, 2.75, 1.25, 2.8, 3, 3, 3.25), d.lept = c(0, 0, 0, 0, 
0, 0, 0.008037479, 0.155240934, 0.128494423, 0.025249815, 0.053921767, 
0.012391113, 0.069338871, 0.022259485, 0.013767903, 0.046661095
), d.byths = c(0, 0, 0, 0, 0, 0, 0, 0.007392425, 0, 0, 0, 0, 
0, 0.044518969, 0.013767903, 0.015553698), d.daph = c(0.140036552, 
1.010093452, 1.629907953, 2.762608821, 1.130338642, 1.311853781, 
0.031419235, 0.029569702, 0.0525659, 0.084166051, 0.024509894, 
0.049564452, 0.104008307, 0.133556908, 0.082607421, 0.062214794
)), row.names = c(1L, 2L, 3L, 4L, 21L, 22L, 23L, 24L, 33L, 34L, 
35L, 36L, 58L, 59L, 60L, 61L), class = "data.frame")

例如,我的前两行(月 == 11,日 == 4,站点 == 11)最终应为 1 行,两行的 'Temp' 和 'DO_mgL' 平均,'secchi' 读数是'S' 和 'E' 拖曳总是相同的,因此应该保持不变并且物种密度应该相加(相加)。完成此操作后,可以移除牵引柱。我想以这样的方式结束(仅显示前两行应该结束的示例)。

地点 深度 温度 DO_mgL 水桶 d.lept d.byths d.daph
11 4 11 10.5 12.83 10.50 1.25 0 0 1.15013

老实说,我什至不知道从哪里开始实现这一目标。执行以下操作可以在一定程度上实现我对我的物种的要求,但这一次只对一个物种进行(我总共有 8 个物种,在本例中缩短了)并删除了其他列:

aggregate(d.lept ~ month + day + Site, data=zp1, FUN = sum)

同样,我需要通过以下方式将“S”和“E”拖车视为一个集合:

  • 将每个站点、日期和月份的“S”和“E”牵引之间的“Temp”和“DO_mgL”平均
  • 保持 'secchi' 不变,因为每个 'S' 和 'E' 组合的值都相同
  • 为每个站点、日期和月份添加“S”和“E”丝束之间的物种密度

更复杂的是,由于现场的时间/天气限制,有时我们无法收集复制品,因此一些站点只有“S”拖链的数据,这些应该保持不变,因为这些特定站点只有一行/日/月。

我的整个数据集有 97 行和 16 列。我总共有 24 个站点在 7 月、8 月和 9 月进行了抽样。我有 8 个物种及其相关密度(来自计数)。

我查看了以下有关我的问题的汇总部分的帖子,但它们对我的帮助不大:hereherehere

我希望这是清楚且有意义的,但我很乐意提供进一步的澄清。感谢您的时间。

霍华德

听起来您想将每组中的行折叠成一行 (??)。

data.table

library(data.table)
##
#
setDT(df)[, .(
  Temp    = mean(Temp),
  DO_mgL  = mean(DO_mgL),
  secchi  = mean(secchi),
  d.lept  = sum(d.lept),
  d.byths = sum(d.byths),
  d.daph  = sum(d.daph)
), by=.(month, day, Site)]

##     month day Site    Temp DO_mgL secchi     d.lept     d.byths     d.daph
##  1:    11   4   11 12.8250 10.495   1.25 0.00000000 0.000000000 1.15013000
##  2:    11   4    6 14.2445 10.140   2.25 0.00000000 0.000000000 4.39251677
##  3:    11   5    9 12.9650 10.395   1.50 0.00000000 0.000000000 2.44219242
##  4:     7  20   10 23.8040  7.175   2.70 0.16327841 0.007392425 0.06098894
##  5:     7  27   13 23.8950  8.085   2.10 0.15374424 0.000000000 0.13673195
##  6:     7  27    2 24.4100  9.140   2.75 0.05392177 0.000000000 0.02450989
##  7:     7  27    3 24.0400  1.290   1.25 0.01239111 0.000000000 0.04956445
##  8:     8  16    4 23.9150  2.440   2.80 0.06933887 0.000000000 0.10400831
##  9:     8  16    5 24.0045  2.465   3.00 0.03602739 0.058286872 0.21616433
## 10:     8  16    6 23.9570  2.540   3.25 0.04666109 0.015553698 0.06221479

setDT(df)将您的转换dfdata.table(不需要小标题)。by=.(...)子句定义组,子句进行.(...)聚合。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将列中的多个元素与所有其他列保持不变?

删除基于另一列的一列中的重复行,并保持其他列不变

将行拆分为多个,同时保持其他列相同 pandas python

汇总一些列,同时保持其他列不变

如何在其他元素重新排序的同时保持评论的立场不变

替换列中的多个值,并在pandas数据框中保持其他值不变

基于其他列的 TSQL 聚合值

仅当具有多个不同的值时,才如何基于其他列删除行

如何从数据框中提取列并将其附加到行,同时保持其他列完整

React.js,如何在保持其他属性不变的同时更改地图内对象的一个属性?

如何将每月数据转换为每周数据,保持其他列不变

在 R 中同时为多个文件添加基于其他列中的随机值的新列

SQL简化了分组和平均(基于多列的扁平行聚合)

在Linux中对列进行排序,保持其他值不变

R:如何在保留其他列的同时聚合一些列

在考虑其他列的同时如何.value_count()行?

根据其他多个列更改各种列-R

如何在多个<td>元素中应用ng-if(或其他条件),同时使其保持DRY

如何基于列值创建其他行或数据框

SQLSERVER分组依据(基于其他列聚合列)

R-如何在使其他列保持静止的同时对单个列进行热编码?

如何在保持其他列的同时grouby列并查找max?

如何在保持其他列固定的同时使一列可滚动?

如何總結特定列的行和平均值

如何基于熊猫中其他列的条件对列的某些值求平均值

保持某些像元高度不变,同时更改其他像元高度

Matlab-在单个字段或向量上添加数字,同时保持其他字段不变

Bash脚本逐行处理csv文件,同时以不同的值更新$ 6,但保持其他值不变

如何交换一列中的值的子集,但保持同一列中的其他值不变?