我有来自记录器的数据,它标识每个组具有连续编号的样本,但原始数据不包括组标识符。因为样本ID == 1,所以可以分辨出新组从哪里开始。
如何赋值分组变量,以便可以使用group_by()
进行分组汇总等操作?
df_have <- tribble(
~n, ~value,
1, .1,
2, .3,
1, .2,
2, .4,
3, .6,
1, .7
)
df_want <- tribble(
~group, ~n, ~value,
"A", 1, .1,
"A", 2, .3,
"B", 1, .2,
"B", 2, .4,
"B", 3, .6,
"C", 1, .7
)
发布于 2021-05-04 12:14:45
将当前行与前一行相减,如果差值小于1,则使用cumsum
递增计数器。我们可以使用内置向量LETTERS
来分配组名。
library(dplyr)
df_have %>%
mutate(group = LETTERS[cumsum(n - lag(n, default = first(n)) < 1)])
# n value group
# <dbl> <dbl> <chr>
#1 1 0.1 A
#2 2 0.3 A
#3 1 0.2 B
#4 2 0.4 B
#5 3 0.6 B
#6 1 0.7 C
base R中的相同逻辑可以实现为:
transform(df_have, group = LETTERS[cumsum(c(TRUE, diff(n) < 1))])
https://stackoverflow.com/questions/67378692
复制相似问题