私はここにいくつかの人工データを持っています。これらは個人の訪問であると想像することができます。同じ個体の最後の観測に基づいて列を追加します
n <- 10e4
set.seed(1)
df <- data.frame(id = sample(1:(n/4), n, replace = TRUE),
date = as.Date("1982-03-03") +
sample(1:900, n, replace = TRUE),
score = runif(n, 0, 10),
happy = sample(c("Yes", "No"), n, replace = TRUE))
head(df, 4)
id date score happy
1 6638 1983-11-24 7.856568 Yes
2 9304 1983-11-25 5.254272 No
3 14322 1982-12-10 6.525329 Yes
4 22706 1983-07-14 7.551247 No
私がしたいことは、3つの列を追加することです。 Date of most recent visit
(すなわち、t-1)、Score of last visit
およびIs happy at most recent visit?
である。
最後の目標は、Is happy at most recent visit?
の現在の訪問制御で幸福の状態を予測でき、2回の訪問がどれほど近いかを見ることです。
以下は私が始めたものです:data.table
に変換し、訪問のランク付けをしてください。所望の出力の
setDT(df)[, date := as.IDate(date)]
df[order(date), visit.n := 1:.N, by=id]
head(df, 4)
id date score happy visit.n
1: 6638 1983-11-24 7.856568 Yes 5
2: 9304 1983-11-25 5.254272 No 4
3: 14322 1982-12-10 6.525329 Yes 2
4: 22706 1983-07-14 7.551247 No 4
例:
id date score happy visit.n last.date last.score last.happy
1: 6638 1983-11-24 7.856568 Yes 5 1983-10-29 8.417868 Yes
2: 9304 1983-11-25 5.254272 No 4 1983-09-04 1.290718 No
3: 14322 1982-12-10 6.525329 Yes 2 1982-08-18 3.546896 No
4: 22706 1983-07-14 7.551247 No 4 1983-04-20 8.560386 No
'COLS = cで( "日付"、 "スコア"、 "幸せ"); df [order(date)、sprintf( "last。%s"、cols):= shift(.SD)、by = id、.SDcols = cols] '私は二重引用符を見つけることができるかどうかを調べる。 – Frank
ブラボ@フランク。問題は解決したようだ。以下の2つの答えは私の意図を誤解しています(おそらく私のせいです)。 – snoram
代わりに '.SDcols = date:happy'を使うことができます。 – lmo