【发布时间】:2016-04-28 21:11:15
【问题描述】:
我有一个数据集,需要创建一个新变量,该变量将填充排序数据集中每个变量按行出现的值,如下所示。
VAR1 VAR2 (to be created)
C1 1
C1 2
C1 3
C2 1
C3 1
C3 2
C4 1
C5 1
提前感谢您的帮助。
【问题讨论】:
标签: r data-manipulation
我有一个数据集,需要创建一个新变量,该变量将填充排序数据集中每个变量按行出现的值,如下所示。
VAR1 VAR2 (to be created)
C1 1
C1 2
C1 3
C2 1
C3 1
C3 2
C4 1
C5 1
提前感谢您的帮助。
【问题讨论】:
标签: r data-manipulation
unlist(sapply(rle(as.character(df$VAR1))$lengths,seq))
#[1] 1 2 3 1 1 2 1 1
【讨论】:
这是另一个使用 rle 和 sequence 的选项
with(df1, sequence(rle(VAR1)$lengths))
#[1] 1 2 3 1 1 2 1 1
或ave
with(df1, ave(seq_along(VAR1),
cumsum(c(TRUE, VAR1[-1]!= VAR1[-length(VAR1)])), FUN = seq_along))
#[1] 1 2 3 1 1 2 1 1
或者使用来自data.table的rleid
library(data.table)
setDT(df1)[, VAR2 := seq_len(.N) , by = rleid(VAR1)]
【讨论】: