基于R中的分组变量创建序列
Create sequence based on grouping variable in R
我正在寻找一种方法来创建一个数字序列 ($C),每当字符串在 ($A) 中发生变化时,该序列就会上升。这取决于分组变量 ($B)。
示例:
A B C
a1 1 1
a1 1 1
a1 1 1
a10 1 2
a10 1 2
a2 1 3
a1 2 1
a20 2 2
a30 2 3
使用data.table
的devel version,可以使用新的rleid
函数
library(data.table) # v >= 1.9.5
setDT(df)[, C := rleid(A), by = B]
# A B C
# 1: a1 1 1
# 2: a1 1 1
# 3: a1 1 1
# 4: a10 1 2
# 5: a10 1 2
# 6: a2 1 3
# 7: a1 2 1
# 8: a20 2 2
# 9: a30 2 3
或 dplyr
df %>% group_by(B) %>% mutate(C = match(A, unique(A)))
# Source: local data frame [9 x 3]
# Groups: B
#
# A B C
# 1 a1 1 1
# 2 a1 1 1
# 3 a1 1 1
# 4 a10 1 2
# 5 a10 1 2
# 6 a2 1 3
# 7 a1 2 1
# 8 a20 2 2
# 9 a30 2 3
和base R
df$C <- with(df, ave(as.character(A), B, FUN=function(x) match(x, unique(x))))
我正在寻找一种方法来创建一个数字序列 ($C),每当字符串在 ($A) 中发生变化时,该序列就会上升。这取决于分组变量 ($B)。 示例:
A B C
a1 1 1
a1 1 1
a1 1 1
a10 1 2
a10 1 2
a2 1 3
a1 2 1
a20 2 2
a30 2 3
使用data.table
的devel version,可以使用新的rleid
函数
library(data.table) # v >= 1.9.5
setDT(df)[, C := rleid(A), by = B]
# A B C
# 1: a1 1 1
# 2: a1 1 1
# 3: a1 1 1
# 4: a10 1 2
# 5: a10 1 2
# 6: a2 1 3
# 7: a1 2 1
# 8: a20 2 2
# 9: a30 2 3
或 dplyr
df %>% group_by(B) %>% mutate(C = match(A, unique(A)))
# Source: local data frame [9 x 3]
# Groups: B
#
# A B C
# 1 a1 1 1
# 2 a1 1 1
# 3 a1 1 1
# 4 a10 1 2
# 5 a10 1 2
# 6 a2 1 3
# 7 a1 2 1
# 8 a20 2 2
# 9 a30 2 3
和base R
df$C <- with(df, ave(as.character(A), B, FUN=function(x) match(x, unique(x))))