我的问题如下:
假设我有一个人年数据集,其中包含有关婚姻状况 (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)的变量。我试图通过在数据集中搜索其他观察“B”来为给定观察“A”做这件事,其中“id”与观察“A”的“pID”具有相同的值并分配“B”的“种族”参加“A”的比赛。
我想过循环:
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
有什么方法可以做到吗?通过尝试使用循环,我是否以正确的方式?