В будущем используйте dput()
для вставки ваших данных. Он сохраняет детали, которые не выводятся на печать, например, если Target является фактором или символьным полем:
df <- structure(list(Target = c("pa", "pa", "pa", "pa", "pa", "pa",
"pa", "pa", "pa", "pa", "pa_li", "pa_li", "pa_li", "pa_li", "pa_li",
"pa_li", "pa_li", "pa_li", "pa_li", "pa_li", "ka", "ka", "ka",
"ka", "ka", "ka", "ka", "ka", "ka", "ka", "ka_li", "ka_li", "ka_li",
"ka_li", "ka_li", "ka_li", "ka_li", "ka_li", "ka_li", "ka_li",
"pha", "pha", "pha", "pha", "pha", "pha", "pha", "pha", "pha",
"pha", "pha_le", "pha_le", "pha_le", "pha_le", "pha_le", "pha_le",
"pha_le", "pha_le", "pha_le", "pha_le"), Time = c(1L, 2L, 3L,
4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L,
18L, 19L, 20L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L,
12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 1L, 2L, 3L, 4L,
5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L,
19L, 20L)), row.names = c(NA, -60L), class = "data.frame")
Ваша проблема в том, что вы смешиваете векторизованную функцию ifelse()
с al oop. Как показывает @Ronak Shah, вам вообще не нужен al oop. Если вы хотите l oop, вам нужно использовать if{}
и else{}
и шагать по строкам:
for (i in 1:nrow(df)){
if (df$Time[i] < 11) {prev <- df$Target[i]
} else {df$Target[i]<-paste(prev, df$Target[i],sep = "_")}
}
print(df[c(1:2, 11:12, 21:22, 31:32, 41:42, 51:52), ], right=FALSE)
# Target Time
# 1 pa 1
# 2 pa 2
# 11 pa_li 11
# 12 pa_li 12
# 21 ka 1
# 22 ka 2
# 31 ka_li 11
# 32 ka_li 12
# 41 pha 1
# 42 pha 2
# 51 pha_le 11
# 52 pha_le 12
Этот подход работает, но он будет медленнее, чем ifelse
.