У меня есть фрейм данных с лицами, которым назначен текстовый идентификатор, который объединяет название места с личным идентификатором (см. Данные ниже). В конечном счете мне нужно выполнить преобразование набора данных из «длинного» в «широкий» (например, с использованием «изменения формы»), чтобы каждый отдельный пользователь содержал только одну строку. Чтобы сделать это, мне нужно назначить переменную «время», которую можно использовать для изменения формы, чтобы идентифицировать изменяющиеся во времени ковариаты и т.д. быть в состоянии идентифицировать до 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
}