通过合并级别R求和行
我想问你一个关于这个数据框架的挑战。我不知道如何通过组合两个级别的“年份因子”来合计()行。找到我的df的模型通过合并级别R求和行,r,variables,sum,aggregate,levels,R,Variables,Sum,Aggregate,Levels,我想问你一个关于这个数据框架的挑战。我不知道如何通过组合两个级别的“年份因子”来合计()行。找到我的df的模型 placette year SP1 SP2 ... SPX 1 1 2013 43 4 ... 2 2 2013 30 0 ... 3
placette year SP1 SP2 ... SPX
1 1 2013 43 4 ...
2 2 2013 30 0 ...
3 3 2013 23 3 ...
4 1 2014 0 0 ...
5 2 2014 2 2 ...
6 3 2014 5 0
7 1 2015 16 3
8 2 2015 16 1
9 3 2015 20 0
10 1 2016 54 4
11 2 2016 51 2
12 3 2016 51 0
我需要将变量SP1、SP2的值和SPX的周期相加。例如,两年(2013+2014)和三年(2013+2014+2015)
我预计:
placette period SP1 SP2 ... SPX
1 1 2(2013+2014) 43 4 ... ...
2 1 3(13+14+15) 59 7 ... ...
3 1 4 (13+14+15+16) 113 11 ... ...
4 2 2 (13+14) 32 2 ... ...
5 ... ... ... ... ... ... ...
保留我的因子“站点”。
我正在研究R,我想解决它
非常感谢你帮助我
问候,,
托马斯。这里是一个使用data.table的方法
library(data.table)
setDT(data)[order(year),][,
lapply(.SD,cumsum),
by="placette",
.SDcols = setdiff(names(data),c("placette","year"))][
,N.Years := 1:.N,by="placette"][]
# placette N.Years SP1 SP2
# 1: 1 1 43 4
# 2: 1 2 43 4
# 3: 1 3 59 7
# 4: 1 4 113 11
# 5: 2 1 30 0
# 6: 2 2 32 2
# 7: 2 3 48 3
# 8: 2 4 99 5
# 9: 3 1 23 3
#10: 3 2 28 3
#11: 3 3 48 3
#12: 3 4 99 3
数据
data <- structure(list(placette = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L,
1L, 2L, 3L), year = c(2013L, 2013L, 2013L, 2014L, 2014L, 2014L,
2015L, 2015L, 2015L, 2016L, 2016L, 2016L), SP1 = c(43L, 30L,
23L, 0L, 2L, 5L, 16L, 16L, 20L, 54L, 51L, 51L), SP2 = c(4L, 0L,
3L, 0L, 2L, 0L, 3L, 1L, 0L, 4L, 2L, 0L)), class = "data.frame", row.names = c(NA,
-12L))
数据使用dplyr
,我们按'placette','year'排列
,按'placette'分组,得到变量名以'SP'开头的cumsum
library(dplyr)
data %>%
arrange(placette, year) %>%
group_by(placette) %>%
mutate_at(vars(starts_with("SP")), cumsum)
# A tibble: 12 x 4
# Groups: placette [3]
# placette year SP1 SP2
# <int> <int> <int> <int>
# 1 1 2013 43 4
# 2 1 2014 43 4
# 3 1 2015 59 7
# 4 1 2016 113 11
# 5 2 2013 30 0
# 6 2 2014 32 2
# 7 2 2015 48 3
# 8 2 2016 99 5
# 9 3 2013 23 3
#10 3 2014 28 3
#11 3 2015 48 3
#12 3 2016 99 3
库(dplyr)
数据%>%
安排(placette,年份)%>%
组别(placette)%>%
在(变量(以“SP”开头)、累计值处变异)
#一个tibble:12x4
#分组:placette[3]
#placette第1年SP2
#
# 1 1 2013 43 4
# 2 1 2014 43 4
# 3 1 2015 59 7
# 4 1 2016 113 11
# 5 2 2013 30 0
# 6 2 2014 32 2
# 7 2 2015 48 3
# 8 2 2016 99 5
# 9 3 2013 23 3
#10 3 2014 28 3
#11 3 2015 48 3
#12 3 2016 99 3
数据
数据您能显示预期输出吗我编辑了我的问题对不起。事实上,我需要对数据帧的一部分求和。我的因子是相同的(地点、年份)和对应于(df[,3:100])的物种发生率。我找到了如何计算我的行数总和的方法,按站点将年份合并到时段中。在这样的时间里,你可以真正看到dplyr
比数据更优雅。在某些方面,table
。@我想在你的数据中。table
,它可以变得更紧凑
data <- structure(list(placette = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L,
1L, 2L, 3L), year = c(2013L, 2013L, 2013L, 2014L, 2014L, 2014L,
2015L, 2015L, 2015L, 2016L, 2016L, 2016L), SP1 = c(43L, 30L,
23L, 0L, 2L, 5L, 16L, 16L, 20L, 54L, 51L, 51L), SP2 = c(4L, 0L,
3L, 0L, 2L, 0L, 3L, 1L, 0L, 4L, 2L, 0L)), class = "data.frame",
row.names = c(NA,
-12L))