如何使用 R 将变量值转换为带下标的长格式数据集中的值?

How to convert variable value to value with subscripts in long form data set using R?

数据集以长格式排列,没有缺失值,有4列-第1列是“id”,第2列是“col”,第3列是二进制变量“ vol”,第四列是时间。 现在,我想将第 2 列“col”中“rec”的值按 id 转换为“rec1,rec2,rec3,...”。

例如,对于id=1和id=6的id,预期的数据集应该如下所示

id   col  vol time
1    rec1  1   1
1    rec2  1   2
1    rec3  0   3
2    rec1  1   1
2    rec2  1   2
2    rec3  1   3
3    rec1  0   1
3    rec2  0   2
3    rec3  0   3
4    rec1  1   1
4    rec2  0   2
4    rec3  0   3
5    rec1  1   1
5    rec2  0   2
6    rec1  1   1
6    rec2  1   2
6    rec3  0   3
6    rec4  0   4

原始数据集结构如下,

structure(list(id = c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 
5, 6, 6, 6, 6), col = c("rec", "rec", "rec", "rec", "rec", "rec", 
"rec", "rec", "rec", "rec", "rec", "rec", "rec", "rec", "rec", 
"rec", "rec", "rec"), vol = c(1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 
0, 1, 0, 1, 1, 0, 0), time = c(1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 
2, 3, 1, 2, 1, 2, 3, 4)), row.names = c(NA, 18L), class = "data.frame")->df

使用paste

df$col <- with(df, paste0(col, time))

我们可以在 tidyverse 工作流程中使用 stringr 包中的 str_c

str_c 等同于 paste(),区别在于 str_c() 默认没有分隔符。

library(dplyr)
library(stringr)

mutate(df, col = str_c(col, time))

   id  col vol time
1   1 rec1   1    1
2   1 rec2   1    2
3   1 rec3   0    3
4   2 rec1   1    1
5   2 rec2   1    2
6   2 rec3   1    3
7   3 rec1   0    1
8   3 rec2   0    2
9   3 rec3   0    3
10  4 rec1   1    1
11  4 rec2   0    2
12  4 rec3   0    3
13  5 rec1   1    1
14  5 rec2   0    2
15  6 rec1   1    1
16  6 rec2   1    2
17  6 rec3   0    3
18  6 rec4   0    4