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 に答える