变量名称顺序pivot_wider

时间:2019-10-01 09:58:48

标签: r dplyr tidyr

您如何更改pivot_wider中变量名的顺序,使其在values_from之前具有names_from?

使用us_rent_income数据集:

df <- us_rent_income %>% 
  pivot_wider(names_from = NAME,
              values_from = c(estimate, moe))

这会产生类似于“ estimate_Alabama”的结果,我们如何更改变量的顺序,使其成为“ Alabama_estimate”?

2 个答案:

答案 0 :(得分:4)

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"

答案 1 :(得分:0)

可能的解决方案:

df <- us_rent_income %>% 
  pivot_wider(names_from = NAME,
              values_from = c(estimate, moe))

names(df) <- sapply(strsplit(names(df), "_"), 
                    function(x) if(length(x)>1) paste0(x[2],"_",x[1]) else x)

names(df)
# [1] "GEOID" "variable" "Alabama_estimate" "Alaska_estimate" 
#     "Arizona_estimate" "Arkansas_estimate" "California_estimate" ...