从多行组合中添加新行

时间:2015-06-22 19:14:19

标签: r row add

我正在尝试将各个列添加到一起,以便在数据帧的末尾添加新行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

对于每个分组状态,Stratum和Plot,我想在df中添加一行,其中包含对,males_24和tib的总和。这需要由一群物种来完成,以制造一个新物种" TODU"。在这种情况下,将所有物种= ABDU和AGWT相加(实际数据集有大约8种物质加起来,4种不包括)。因此,将有两个新行(保持所有其他行仍然添加到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排序。任何帮助都将非常感激。感谢。

1 个答案:

答案 0 :(得分: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