每次在R中“重新出现”时在组上增加行号

时间:2018-09-03 14:21:42

标签: r

在R中是否有可能创建一个列,每当另一列的组级别“再次出现”(即

),该列就以1的增量递增

查看(x)

vents    Group     Number of times present
    1           1               1
    2           1               1
    3           1               1
    4           2               1
    5           1               2
    6           1               2
    7           2               2
    8           2               2 
    9           3               1
    10          2               3
    11          3               2
    12          3               2
    13          2               4
    14          1               3
    15          1               3

(我想要的结果是“存在次数列”

假设上面的示例是我的数据框,我已经尝试过:

x <- within(x, {Number of times present<- cumsum(c(1,abs(diff(Group))))})

但是,每次组级别更改时,它只会增加一个(无论是哪个组,以及先前“重新出现”次数的过去历史记录

任何帮助将不胜感激(我的实际数据帧很大,但是我猜想for循环可能是前进的方向?

谢谢

1 个答案:

答案 0 :(得分:0)

我通过rle函数和1个for循环来解决这个问题:

x <- data.frame(Group = c(1, 1, 1, 2, 1, 1, 2, 2, 3, 2, 3, 3, 2, 1, 1))

rle(x$Group)
# Run Length Encoding
#  lengths: int [1:9] 3 1 2 2 1 1 2 1 2
#  values : num [1:9] 1 2 1 2 3 2 3 2 1

y1 <- rle(x$Group)$values
y2 <- rle(x$Group)$lengths
z <- c()
for(i in unique(y1)){
    z[y1 == i] <- 1 : sum(y1 == i)
}

rep(z, y2)
# [1] 1 1 1 1 2 2 2 2 1 3 2 2 4 3 3