私はこのようなものに見えるのデータセットがあります。y
変数のそれぞれについて基準年から変更を計算しますか?
df1 <- data.frame(id = c(rep("A1",4), rep("A2",4)),
time = rep(c(0,2:4), 2),
y1 = rnorm(8),
y2 = rnorm(8))
を、私はtime==0
以来の変化を計算します。基本的に、私はこれをやりたい:
calc_chage <- function(id, data){
#y1
y1_0 <- data$y1[which(data$time==0 & data$id==id)]
D2y1 <- data$y1[which(data$time==2 & data$id==id)] - y1_0
D3y1 <- data$y1[which(data$time==3 & data$id==id)] - y1_0
D4y1 <- data$y1[which(data$time==4 & data$id==id)] - y1_0
#y2
y2_0 <- data$y2[which(data$time==0 & data$id==id)]
D2y2 <- data$y2[which(data$time==2 & data$id==id)] - y2_0
D3y2 <- data$y2[which(data$time==3 & data$id==id)] - y2_0
D4y2 <- data$y2[which(data$time==4 & data$id==id)] - y2_0
#Output
out <- data.frame(id=id, delta=rep(2:4, 2),
outcome=c(rep("y1",3), rep("y2",3)),
change = c(D2y1, D3y1, D4y1,
D2y2, D3y2, D4y2))
}
library(purrr)
changes <- map(.x = unique(df1$id), .f = calc_chage, data=df1) %>%
map_df(bind_rows)
これはもっと効率的な方法があると私は推測している。ああ、私はそれについて考えることはできません。提案?
あなたの関数では:ベース
R
の機能に依存したい、私はaggregate()
が掲載他のソリューションには良い選択肢であることがわかります'data'と' df'です。この例では 'df'はどこにありますか。 'map'コードでエラーが発生しました::エラー:タイプ 'closure'のオブジェクトはサブセット化不可能です – akrun残念ですが、dfはデータであったはずです – Ignacio