在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循环可能是前进的方向?
谢谢
答案 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