我有一个数据框,其中的个人分配了一个文本 id,该文本 id 将地名与个人 id 连接起来(参见下面的数据)。最终,我需要将数据集从“长”转换为“宽”(例如,使用“重塑”),以便每个人只包含一行。为了做到这一点,我需要分配一个“时间”变量,reshape 可以使用它来识别随时间变化的协变量等。我有(可能是坏的)代码来为重复最多两次的个人执行此操作,但需要能够识别多达 18 次重复出现。如果我删除哈希前面的行,下面的代码可以正常工作,但最多只能识别两次重复。如果我把那条线留在里面(这对于重复两次以上的人来说似乎是必要的),R 会窒息,
Error in if (data$uid[i] == data$uid[i - 2]) { :
argument is of length zero
有人能帮忙吗?提前致谢!
place <- rep("ny",10)
pid <- c(1,1,2,2,2,3,4,4,5,5)
uid<- paste(place,pid,sep="")
time <- rep(0,10)
data <- cbind(uid,time)
data <- as.data.frame(data)
data$time <- as.numeric(data$time)
#bad code
data$time[1] <- 1 #need to set first so that loop doesn't go to a row that doesn't exist (i.e., row 0)
for (i in 2:NROW(data)){
data$time[i] <- 1 #set first occurrence to 1
if (data$uid[i] == data$uid[i-1]) {data$time[i] <- 2} #set second occurrence to 2, etc.
#if (data$uid[i] == data$uid[i-2]) {data$time[i] <- 3}
i <- i+1
}