我正在处理一个大型宽数据集,需要将其转换为多个长格式的数据集。如何使用pivot_longer来实现?问题在于,变量名末尾包含计数,但方式不一致(并且变量集的长度也不一致)。例如,有时计数范围从*01到*88,有时计数范围从*1到*26,有时*1完全被省略了。
我将包含一个脚本,该脚本会生成如下所示的高度简化版本的数据。实际上,它包含数千个变量,并且存在一些不一致之处。
library(tidyr)
set.seed(1234)
m <- matrix(sample(1:10, 75, replace = T), 5, 15)
id <- 1:5
d <- cbind(id, as.data.frame(m))
names(d) <- c("id", "X1_hg", "X1_hg2", "X1_hg3", "X1_hg4", "cuphg_m01",
"cuphg_m02", "cuphg_m03", "cuphg_m04", "cuphg_m05", "cuphg_v01",
"cuphg_v02", "cuphg_v03", "cuphg_v04", "cuphg_v05", "cuphg_v06")
我正在寻找的结果是一个长数据框,其中包含以下列:id、index(或类似内容)、X1_hg、cuphg_m、cuphg_v。
非常感谢您的帮助!
我尝试寻找一种方法来明确地告诉pivot_longer要从宽数据中组合哪些变量集,最好能找到某种有效的方法来处理它们(例如X1:X10或starts_with("X"))。然而,我没能成功。
也许有一种方法可以有效地重命名变量,然后在具有一致计数的新变量名称上使用pivot_longer,但我也不知道如何做到这一点(除了一次重命名一个,这是非常不可取的)。
我已经查看了 SO 上有关具有多个变量的pivot_longer 的其他问题,但我没有找到使用 names_prefix、names_sep 或 names_pattern 来解决问题的方法。