【问题标题】:add new rows from combination of multiple rows从多行组合中添加新行
【发布时间】:2015-06-22 19:14:19
【问题描述】:

如果满足条件,我正在尝试将各种列添加在一起以将新行添加到数据框 df 的末尾。

SurveyYear State Stratum Plot species pairs males_24 tib
1       2015    CT      12    4    MALL     0        0   1
2       2015    CT      12    4    ABDU     1        2   4
3       2015    CT      12    4    AGWT     1        0   0
4       2015    CT      11    2    ABDU     2        1   2
5       2015    CT      11    2    MALL     0        1   0
6       2015    CT      11    2    ABDU     4        4   7

对于每个分组的 State、Stratum 和 Plot,我想在 df 中添加一行,其中包含对、males_24 和 tib 的总和。这需要由物种群来完成,以制造一个新物种“TODU”。在这种情况下,将所有物种加起来 = ABDU 和 AGWT(实际数据集大约有 8 个物种要加起来,4 个不包括在内)。因此将有 2 个新行(保持所有其他行)添加到 df,它们是:

2015 CT 12 4 TODU 2 2 4
2015 CT 11 2 TODU 6 5 9

我可以很容易地手动添加行,或者使用添加单个列

df[nrow(df) + 1, ] <- c(,)

但是我很难弄清楚如何分组和求和,同时保持数据集的其余部分完好无损,并针对许多变化进行此操作。在 SAS 中,我会使用 proc 排序来执行此操作,但我认为我不需要先使用 R 进行排序。任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 如果你想按州、地层、地块和物种分组,然后为它们的每个组合计算对的总和,males_24 和 tib,你不会只得到两行而是 5。跨度>
  • @SabDeM 仅当您包含空集时,请注意只有 2 个唯一的数据组合。
  • @LegalizeIt 对不起,我不明白你的意思。我已经发布了我的解决方案,以向您展示我的想法(但我当然可能错了)意图是。
  • @SabDeM 抱歉,我没有注意到您也将物种作为分组因素。

标签: r row add


【解决方案1】:

使用dplyr 你可以做到(数据是dat

library(dplyr)

new_rows <- dat %>% group_by(State, Stratum, Plot) %>%
  summarise(SurveyYear = 2015,
            species = "TODU",
            pairs = sum(pairs),
            males_24 = sum(males_24),
            tib = sum(tib))
new_rows
#   State Stratum Plot SurveyYear species pairs males_24 tib
# 1    CT      11    2       2015    TODU     6        6   9
# 2    CT      12    4       2015    TODU     2        2   5

rbind(dat, new_rows)

编辑:对某些物种求和,先总结,再添加物种列。

specs <- c("AGWT", "ABDU")
new_rows <- dat %>% group_by(State, Stratum, Plot) %>%
  summarise(SurveyYear = 2015,
            pairs = sum(pairs[species %in% specs]),
            males_24 = sum(males_24[species %in% specs]),
            tib = sum(tib[species %in% specs])) %>%
  mutate(species = "TODU")
new_rows

#   State Stratum Plot SurveyYear pairs males_24 tib species
# 1    CT      11    2       2015     6        5   9    TODU
# 2    CT      12    4       2015     2        2   4    TODU

【讨论】:

  • 感谢您的帮助!这适用于州/地层/地块中的所有物种,但我只想使用几个物种。在示例中,我只想包括 AGWT 和 ABDU,而不是 MALL 物种。有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
  • 2012-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多