【问题标题】:Making new variables for every group of observation in R为 R 中的每组观察创建新变量
【发布时间】:2019-08-23 02:52:12
【问题描述】:

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

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

我真的不知道如何开始。我在考虑一个变异函数,比如:

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

但那会是很多打字,也许会出现一个新问题。

【问题讨论】:

  • 可重现的例子。请。
  • 这看起来很像 SQL。也许您想按列过滤您的数据框,或者在您的数据框上调用 unique() 或 distinct() 以删除重复的行。

标签: r data-analysis


【解决方案1】:

基本上,您希望将每个变量的长数据转换为宽数据。在这种情况下,您可以使用tidyr::spread 覆盖这些lapply。假设数据如下所示:

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()

如果这不是你想要的,请告诉我。

【讨论】:

  • 谢谢!这正是我一直在寻找的。抱歉延迟回复:)
猜你喜欢
  • 1970-01-01
  • 2021-05-05
  • 1970-01-01
  • 2021-09-27
  • 2012-03-02
  • 2023-01-13
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多