我有包含 ID、时间和状态列的长格式数据。我希望通过 s_2 和 s_3 将一些状态合并到 ID 中,并对时间列进行求和。假设我有数据:
ID state time
1 s_1 4
1 s_2 6
1 s_3 7
2 s_1 2
2 s_2 12
2 s_3 5
2 s_4 4
3 s_1 10
3 s_2 2
3 s_3 3
我想转换成:
ID state time
1 s_1 4
1 s_2+ 13
2 s_1 2
2 s_2+ 17
2 s_4 4
3 s_1 10
3 s_2+ 5
有任何想法吗?
更改标签state
值,然后按总和分组。
library(dplyr)
df %>%
group_by(ID, state = replace(state, state %in% c('s_2', 's_3'), 's_2+')) %>%
summarise(time = sum(time))
# ID state time
# <int> <chr> <int>
#1 1 s_1 4
#2 1 s_2+ 13
#3 2 s_1 2
#4 2 s_2+ 17
#5 2 s_4 4
#6 3 s_1 10
#7 3 s_2+ 5
或者以 R 为基数:
aggregate(time~ID + state, transform(df,
state = replace(state, state %in% c('s_2', 's_3'), 's_2+')), sum)
如果有很多这样的团体你想瓦解也许forcats::fct_collapse
会有帮助的。
df %>%
group_by(ID, state = forcats::fct_collapse(state, `s2+` = c('s_2', 's_3'))) %>%
summarise(time = sum(time))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)