在 R 中将长数据转换为宽数据

Convert long data to wide in R

我有以下数据:

day = rep(c(24,25,26), 2)
status = c(1,1,1,0,0,0)
time = c(22313, 22106, 30192, 2340, 2219, 2401)
df = cbind.data.frame(day, status, time)

我想重塑数据,使其从 6 行变为 3 行(天数不再重复),并且我为每种类型的状态获得一列,时间变量转换为 status1 和 status0。下面是我正在寻找的最终输出:

day = c(24,25,26)
time_status1 = c(22313, 22106, 30192)
time_status0 = c(2340, 2219, 2401)
df_new = cbind.data.frame(day, time_status0, time_status1)
df_new

您可以使用 tidyr 包中的 pivot_wider 执行此操作:

df |>
    dplyr::arrange(status) |> # Not necessary if order of columns not important
    tidyr::pivot_wider(
        names_from = status,
        values_from = time,
        names_prefix = "time_status"
    )

# # A tibble: 3 x 3
#     day time_status0 time_status1
#   <dbl>        <dbl>        <dbl>
# 1    24         2340        22313
# 2    25         2219        22106
# 3    26         2401        30192