通过递增样本编号分配组 ID
Assigning group ID by incrementing sample number
我有来自记录器的数据,该数据识别每组具有连续编号的样本,但原始数据不包含组标识符。人们可以知道新组从哪里开始,因为样本 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
)
当前行与前一行相减,如果差值小于 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
基本 R 中的相同逻辑可以实现为:
transform(df_have, group = LETTERS[cumsum(c(TRUE, diff(n) < 1))])
我有来自记录器的数据,该数据识别每组具有连续编号的样本,但原始数据不包含组标识符。人们可以知道新组从哪里开始,因为样本 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
)
当前行与前一行相减,如果差值小于 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
基本 R 中的相同逻辑可以实现为:
transform(df_have, group = LETTERS[cumsum(c(TRUE, diff(n) < 1))])