我的数据框中有11个变量。第一个是观察的唯一标识符(一个平面)。第二个是从1到21的数字,表示给定飞机的飞行。其余变量是时间,速度,距离等。
我要做的是为每个航班组(数量)创建新变量,例如time_1
,time_2
,...,velocity_1
,velocity_2
等,因此减少了观察次数(重复观察)。
我真的不知道如何开始。我在考虑像这样的变异函数:
mutate(df, time_1 = ifelse(n_flight == 1, time, NA))
但这将需要大量输入,并且可能会出现一个新问题。
答案 0 :(得分:0)
基本上,您想为每个变量将长数据转换为宽数据。在这种情况下,您可以lapply
与tidyr::spread
一起使用。假设数据如下所示:
library(dplyr)
library(tidyr)
df <- data.frame(
ID = c(rep("A", 3), rep("B", 3)),
n_flight = rep(seq(3), 2),
time = seq(19, 24),
velocity = rev(seq(65, 60))
)
然后,只要您摆脱多余的ID变量,以下内容就会产生您感兴趣的结果。
lapply(
setdiff(names(df), c("ID", "n_flight")), function(x) {
df %>%
select(ID, n_flight, !!x) %>%
tidyr::spread(., key = "n_flight", value = x) %>%
setNames(paste(x, names(.), sep = "_"))
}
) %>%
bind_cols()
让我知道这是否不是您想要的。