如何使用Pivot_longer将宽型数据重塑为多变量的长型数据?

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

我想请教一下如何将以下数据框从宽型改成长型。

宽型数据如下。重塑前的宽型数据长型数据,也就是我想得到的数据框,如下所示。重塑后的长类型数据如果你能给我一些使用pivot-longer做这个的技巧,我将非常感激。

我可以通过写.NET来分别对BLS和ELS的数据进行重塑,但这样一来,我需要将这两个独立的文件合并。

df_long_BLS <- df %>%
pivot_longer(
cols = starts_with("BLS_tchrG"),
names_to = "grade",
names_prefix = "BLS_tchrG",
values_to = "BLS_tchrG"
)
df_long_ELS <- df %>%
pivot_longer(
cols = starts_with("ELS_tchrG"),
names_to = "grade",
names_prefix = "ELS_tchrG",
values_to = "ELS_tchrG"
)

但这样一来,我需要合并这2个独立的文件,我想知道如何在不做2个独立文件的情况下进行数据重塑。

非常感谢。

r tidyverse tidyr reshape2
1个回答
0
投票

你可以尝试用.NET技术将宽型数据转换成长型数据。

tidyr::pivot_longer(df, cols = -ID_IE, 
                    names_to = c('.value', 'grade'), 
                    names_pattern = '(.*)(\\d+)')

# A tibble: 8 x 4
#  ID_IE grade BLS_tchrG ELS_tchrG
#  <dbl> <chr>     <dbl>     <dbl>
#1  2135 2             1         1
#2  2135 7             1         1
#3  2101 2             0         0
#4  2101 7             2         0
#5  2103 2             0         0
#6  2103 7             3         0
#7  2111 2             1         1
#8  2111 7             4         1

数据

在这个数据上试过 。

df <- data.frame(ID_IE = c(2135, 2101, 2103, 2111), BLS_tchrG2 = c(1, 0, 0, 1), 
                 BLS_tchrG7 = 1:4,
                 ELS_tchrG2 = c(1, 0, 0, 1), ELS_tchrG7 = c(1, 0, 0, 1))
© www.soinside.com 2019 - 2024. All rights reserved.