在 R 中旋转更长时间

问题描述 投票:0回答:1

这是我的输入数据集,其中包含一行和 12 列/变量:

df <- data.frame(q_q10=0,q_q20=0, q_q30=0,q_q40=400,
                 q_q10_low=0,q_q20_low=0,q_q30_low=0,q_q40_low=350,
                 q_q10_up=24,q_q20_up=24,q_q30_up=24,q_q40_up=500)

我想重塑 df ,以便得到一个包含 4 行和 3 个变量(分位数、下、上)的数据框。换句话说,我希望 df2 看起来像:

data.frame(quantile=c(0,0,0,400), low=c(0,0,0,350), up=c(24,24,24,500))

如何使用

pivot_longer()
包中的
tidyr
函数来做到这一点?

谢谢!!

r dplyr pivot tidyr
1个回答
0
投票

我认为这不可能一步完成,所以我们将双重旋转它。不确定您是否需要

qcode
(我的名字)栏,我保留它以防万一。

library(dplyr)
library(tidyr)
pivot_longer(df, cols = everything(), names_pattern = "q_([^_]*)(_.*)?", names_to = c("qcode", "lowup")) %>%
  mutate(lowup = if_else(nzchar(lowup), sub("^_", "", lowup), "quantile")) %>%
  pivot_wider(id_cols = qcode, names_from = lowup, values_from = value)
# # A tibble: 4 × 4
#   qcode quantile   low    up
#   <chr>    <dbl> <dbl> <dbl>
# 1 q10          0     0    24
# 2 q20          0     0    24
# 3 q30          0     0    24
# 4 q40        400   350   500
© www.soinside.com 2019 - 2024. All rights reserved.