我正在尝试将各个列添加到一起,以便在数据帧的末尾添加新行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排序。任何帮助都将非常感激。感谢。
答案 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