【发布时间】:2021-04-15 21:08:37
【问题描述】:
我有一个数据集,每行包含多个不同范围的列(每行对应一个人),如下所示。不同列类型的每个实例都有 3 个级别(0,1 和 2)。
id col1_0 col1_1 col1_2 col2_0 col2_1 col2_2 col3_0 col3_1 col3_2
1 0 1 3 2 2 3 3 4 5
2 1 1 2 2 4 7 4 5 5
.
.
etc.
对于每个 id,我需要将所有 col1 折叠到一列中,将所有 col2 折叠到另一列中,并将所有 col3 折叠到另一列中。如下。
id x col1 col2 col4
1 0 0 2 3
1 1 1 2 4
1 2 3 3 5
2 0 1 2 4
2 1 1 4 5
2 2 1 7 5
.
.
etc.
此外,我还需要为每个 id 创建一个值为 0,1 和 2 的 x 列。但是,我只设法用下面的代码折叠第一列范围 (col1)。
library(tidyverse)
longer_data <- dataframe %>%
group_by(id) %>%
pivot_longer(col1_0:col1_2, names_to = "x1", values_to = "col1")
x1 在这里使用原始列名创建一个列。所以我会创建一个额外的 x 列,它只保留原始列名的最后一个数字。
有没有办法做到这一点?非常感谢!
【问题讨论】: