1

私の問題は次のとおりです。

婚姻状況 (cStatus)、人種、年、配偶者 ID (pID)、および居住都市に関する情報を含む人年データセットがあるとします。

data<-data.frame(cbind(c(rep(1,5),rep(2,5),rep(3,5),rep(4,5),rep(5,5)),c(rep(c(1,2,3,4,5),5)),c(NA,NA,NA,NA,NA,NA,NA,3,3,NA,NA,NA,2,2,7,6,6,6,6,6,NA,NA,NA,NA,NA),c(0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0),c(1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1),c(rep(1,5),rep(1,2),rep(2,3),rep(2,4),1,rep(1,5),rep(1,5))))
names(data)<- c("id","year","pID","cStatus","race","city")

> head(data)  
id year pID cStatus race city
 1    1    NA       0    1    1
 1    2    NA       0    1    1
 1    3    NA       0    1    1
 1    4    NA       0    1    1
 1    5    NA       0    1    1
 2    1    NA       0    1    1

観測ごとに配偶者の人種 (pRace) の変数を作成したいと考えています。「id」が観測「A」の「pID」と同じ値を持つ他の観測「B」をデータセットで検索し、「B」の「レース」を割り当てることにより、特定の観測「A」に対してそれを実行しようとしています「A」のpRaceへ。

私はループについて考えました:

for(i in unique(data$id)){
  data[data$id==i,]$pRace <-ifelse(data[data$id==i,]$cStatus==1,data[data$id==data[data$id==i,]$pID,]$race,NA)
}

これは、非常に醜いだけでなく、次の結果をもたらします。

Warning messages:
1: In `[<-.data.frame`(`*tmp*`, data$id == i, , value = list(id = c(1,  :
  provided 8 variables to replace 7 variables

それを正しく行う方法はありますか?ループを使用しようとするのは正しい方法ですか?

4

1 に答える 1