2

我正在尝试制作一个计数器,该计数器会随着另一个向量中的每个新变化而增加。例如,我有几个人在几周内被观察,我想知道他们被观察了多少周。所以我最终会得到一个这样的表:

     Id   year Week  Weeks observed
      1   2006   10       1
      1   2006   10       1
      1   2006   11       2
      1   2006   11       2
      1   2006   12       3
      1   2006   13       4
      1   2007    1       5
      1   2007    2       6
      1   2007    3       7
      1   2007    4       8
      1   2007    5       9
      1   2007    6      10
      2   2006   10       1
      2   2006   10       1
      2   2006   11       2
      2   2006   11       2
      2   2006   12       3
      2   2006   13       4
      2   2007    1       5
      2   2007    2       6
      2   2007    3       7
      2   2007    4       8
      2   2007    5       9
      2   2007    6      10
4

1 回答 1

2

假设您的数据位于名为 的 data.frame 中dat,您可以使用tapply并转换Phase为一个因子,然后将其从其级别中剥离以使用底层整数值:

dat$newcounter <- unlist(tapply(dat$Phase, dat$Id,
  function(x) unclass(as.factor(x))))

强制性data.table回答:

library(data.table)

dt<-as.data.table(dat)

dt[, newcounter := unclass(as.factor(Phase)), by = Id]

编辑

为了解释新措辞的问题,这里有一种使用data.table.

dt <- as.data.table(dat[, -4])        # Create data.table
setkeyv(dt, c("Id", "year", "Week"))  # Create key for data.table

dt2 <- unique(dt)                     # Get only unique rows by key

dt3 <- dt2[, Weeks.observed := seq_len(.N), by = "Id"] # Create new variable

dt[dt3]                               # Merge data.tables back together
于 2012-09-10T13:30:17.837 回答