如何在 R 中编辑 pivot_wider 中的迭代顺序
How can I edit the iteration order in pivot_wider in R
我将 df
转换为宽格式 (df_wide
),指定在创建新列时,df
中 'moderator_cat'
列的名称应该放在第一位df_wide
数据框上的名称。
# create df
df <- data.frame(LIWC_name=c('rc_WC', 'rc_WC', 'rc_WC', 'rc_WC'),
OCEAN = c('O', 'O', 'E', 'E'),
moderator_cat = c('version', 'sample', 'version', 'sample'),
group1 = c(-.02, -.12, .34, .04),
group2 = c(-.13, .001, .12, .08),
group3 = c(NA, -.09, NA, .33))
# create wide version of df
df_wide <- pivot_wider(
data = df,
names_from = moderator_cat,
names_sep = "_",
values_from = c("group1":"group3"),
names_glue = "{moderator_cat}_{.value}"
)
到目前为止一切正常,但我希望 df_wide
中的列首先遍历所有 'groups'(即 'version_group1'、'version_group2'、'version_group3'),然后对 'sample' 变量(即 'sample_group1'、'sample_group2'、'sample_group3')执行相同的操作,而不是现在的顺序(version_group1、sample_group1、version_group2、sample_group2 等)。有办法吗?
我们可以使用str_sort
library(dplyr)
library(stringr)
df_wide %>%
select(LIWC_name, OCEAN, str_sort(names(.)[-(1:2)], numeric = TRUE))
或者另一种选择是 select-helpers
df_wide %>%
select(LIWC_name, OCEAN, starts_with('version'), starts_with('sample'))
-输出
# A tibble: 2 x 8
# LIWC_name OCEAN version_group1 version_group2 version_group3 sample_group1 sample_group2 sample_group3
# <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 rc_WC O -0.02 -0.13 NA -0.12 0.001 -0.09
#2 rc_WC E 0.34 0.12 NA 0.04 0.08 0.33
我将 df
转换为宽格式 (df_wide
),指定在创建新列时,df
中 'moderator_cat'
列的名称应该放在第一位df_wide
数据框上的名称。
# create df
df <- data.frame(LIWC_name=c('rc_WC', 'rc_WC', 'rc_WC', 'rc_WC'),
OCEAN = c('O', 'O', 'E', 'E'),
moderator_cat = c('version', 'sample', 'version', 'sample'),
group1 = c(-.02, -.12, .34, .04),
group2 = c(-.13, .001, .12, .08),
group3 = c(NA, -.09, NA, .33))
# create wide version of df
df_wide <- pivot_wider(
data = df,
names_from = moderator_cat,
names_sep = "_",
values_from = c("group1":"group3"),
names_glue = "{moderator_cat}_{.value}"
)
到目前为止一切正常,但我希望 df_wide
中的列首先遍历所有 'groups'(即 'version_group1'、'version_group2'、'version_group3'),然后对 'sample' 变量(即 'sample_group1'、'sample_group2'、'sample_group3')执行相同的操作,而不是现在的顺序(version_group1、sample_group1、version_group2、sample_group2 等)。有办法吗?
我们可以使用str_sort
library(dplyr)
library(stringr)
df_wide %>%
select(LIWC_name, OCEAN, str_sort(names(.)[-(1:2)], numeric = TRUE))
或者另一种选择是 select-helpers
df_wide %>%
select(LIWC_name, OCEAN, starts_with('version'), starts_with('sample'))
-输出
# A tibble: 2 x 8
# LIWC_name OCEAN version_group1 version_group2 version_group3 sample_group1 sample_group2 sample_group3
# <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 rc_WC O -0.02 -0.13 NA -0.12 0.001 -0.09
#2 rc_WC E 0.34 0.12 NA 0.04 0.08 0.33