为R中的每个观察组创建新变量

时间:2019-04-01 21:07:22

标签: r data-analysis

我的数据框中有11个变量。第一个是观察的唯一标识符(一个平面)。第二个是从1到21的数字,表示给定飞机的飞行。其余变量是时间,速度,距离等。

我要做的是为每个航班组(数量)创建新变量,例如time_1time_2,...,velocity_1velocity_2等,因此减少了观察次数(重复观察)。

我真的不知道如何开始。我在考虑像这样的变异函数:

mutate(df, time_1 = ifelse(n_flight == 1, time, NA))

但这将需要大量输入,并且可能会出现一个新问题。

1 个答案:

答案 0 :(得分:0)

基本上,您想为每个变量将长数据转换为宽数据。在这种情况下,您可以lapplytidyr::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()

让我知道这是否不是您想要的。