变量名的顺序 pivot_wider

Sco*_*ott 10 r dplyr tidyr

如何更改pivot_wider 中变量名称的顺序,使names_from 位于values_from 之前?

使用 us_rent_income 数据集:

df <- us_rent_income %>% 
  pivot_wider(names_from = NAME,
              values_from = c(estimate, moe))
Run Code Online (Sandbox Code Playgroud)

这给出了像“estimate_Alabama”这样的结果,我们如何更改变量的顺序,使其成为“Alabama_estimate”?

H 1*_*H 1 15

编辑:按照tidyr 1.1.0变量名的顺序可以用names_glue参数控制:

us_rent_income %>%
  pivot_wider(
    names_from = NAME,
    values_from = c(estimate, moe),
    names_glue = "{NAME}_{.value}"
  )
Run Code Online (Sandbox Code Playgroud)

旧答案:

文档pivot_wider()说明“如果values_from包含多个值,该值将被添加到输出列的前面”,因此似乎没有任何方法可以将其作为重塑的一部分进行控制。相反,它必须在之后完成。

假设数据集中没有其他变量名称包含_(如果是这样,可以使用names_sep参数将分隔符更改为唯一的内容),一种方法是:

library(tidyr)
    
df <- us_rent_income %>% 
  pivot_wider(names_from = NAME,
              values_from = c(estimate, moe)) %>%
  setNames(nm = sub("(.*)_(.*)", "\\2_\\1", names(.)))

head(names(df))

[1] "GEOID"  "variable"  "Alabama_estimate"  "Alaska_estimate"  "Arizona_estimate"  "Arkansas_estimate"
Run Code Online (Sandbox Code Playgroud)