Я стремлюсь нормализовать длину векторов для усреднения в аккуратном наборе данных.Использование ок, кажется, путь, но я не могу заставить его работать эффективно в Tidyverse.Одна из проблем, вероятно, связана с изменением размера в рамках данных.Вот воспроизводимый пример:
# create reproducible dataset
i = 80
I = 110
id = rep("AA", I+i)
event = rep("event1", I+i)
sub_event = NA
sub_event[1:i] = 1
sub_event[i+1:I] = 2
sub_event = as.factor(sub_event)
y1 = sin(seq(0, 5*pi, length.out = i))
y2 = sin(seq(0, 5*pi, length.out = I))
y3 = cos(seq(0, 5*pi, length.out = i))
y4 = cos(seq(0, 5*pi, length.out = I))
var1 = c(y1,y2)
var2 = c(y3,y4)
df1 <- data.frame(id, event, sub_event,var1, var2)
df2 <- df1
df2$event = "event2"
df <- rbind(df1, df2)
temp <- df
temp$id = "BB"
df <- rbind(df, temp)
# create a "time" vector for sub_event
df <- df %>%
group_by(id, event, sub_event) %>%
mutate(sub_event_time = seq_along(var1)) %>%
select(id, event, sub_event, sub_event_time, everything()) %>%
ungroup()
График var1
# plot
ggplot(df,
aes(x=sub_event_time, y=var1, colour = sub_event)) +
geom_point() +
geom_path() +
facet_wrap(id~event)
Я хочу получить данные преобразования / повторной выборки для получения длиныvar1 для каждого sub_events будет длиной самого длинного sub_event в каждом событии для каждого идентификатора.
Например, мы хотим: длина var1 для события 1 sub event 1 = длина var1 для события 1 sub event 2 (который самый длинный).
Вот попытка:
# attempt for var1 only
aim.df <- df %>%
ungroup() %>%
select(-var2) %>%
group_by(id, event) %>%
mutate(max_sub_event_time = max(sub_event_time)) %>%
mutate(var1 = approx(var1, n = max_sub_event_time)$y)
Это возвращает следующую ошибку:
Error in mutate_impl(.data, dots) :
Column `var1` must be length 190 (the group size) or one, not 110
In addition: Warning messages:
1: In if (n <= 0) stop("'approx' requires n >= 1") :
the condition has length > 1 and only the first element will be used
2: In seq.int(x[1L], x[nx], length.out = n) :
first element used of 'length.out' argument
Есть идеи?