观察人数分组

two*_*owo 7 r sas

在RI中有一个数据帧,其中观察由几个值描述,其中一个值是一个因子.我已经按照这个因素对数据集进行了排序,并希望添加一个列,在该列中,我将在每个级别的因子上获得一些观察结果,例如

factor   obsnum
a        1
a        2
a        3
b        1
b        2
b        3
b        4
c        1
c        2
...
Run Code Online (Sandbox Code Playgroud)

在SAS中,我使用以下内容:

data logs.full;
    set logs.full;
    count + 1;
    by cookie;
    if first.cookie then count = 1;
run;
Run Code Online (Sandbox Code Playgroud)

我怎样才能在R中实现这一目标?

谢谢,

And*_*rie 13

使用rle(运行长度编码)和sequence:

x <- c("a", "a", "a", "b", "b", "b", "b", "c", "c")

data.frame(
    x=x,
    obsnum = sequence(rle(x)$lengths) 
)

  x obsnum
1 a      1
2 a      2
3 a      3
4 b      1
5 b      2
6 b      3
7 b      4
8 c      1
9 c      2
Run Code Online (Sandbox Code Playgroud)


Thi*_*rry 5

这是ddply()解决方案

dataset <- data.frame(x = c("a", "a", "a", "b", "b", "b", "b", "c", "c"))
library(plyr)
ddply(dataset, .(x), function(z){
  data.frame(obsnum = seq_along(z$x))
})
Run Code Online (Sandbox Code Playgroud)