提问人:Maleeha Shahid 提问时间:4/13/2023 最后编辑:MarkMaleeha Shahid 更新时间:7/20/2023 访问量:57
使用列集进行更长的透视
Pivot longer with sets of columns
问:
我有一个巨大的数据集,其中包含 32 个人的大量变量(参数)。它是一个广泛的数据集,其列范围包括例如所有个人的名字、所有个人的姓氏、角色、机构和其他参数。例如,所有变量都以相同的前缀开头,新变量以 1 到 32 的数值开头,然后是用下划线分隔的各个参数的名称。例如,第二组变量的示例是 。每个参数都有 32 个数字。college_collaborator
_
college_collaborator_1_First_name, college_collaborator_2_First_name, college_collaborator_3_First_name
college_collaborator_1_last_name, college_collaborator_2_last_name, college_collaborator_3_last_name
数据集如下所示: dataset_1
dataset_1 <- read.table(text=
"ID cb_1_fn cb_2_fn cb_3_fn cb_1_ln cb_2_ln cb_3_ln
1 Jill Pete Edy James Lil febe
2 Aliya Edy Jill Troy adam tom
3 Tom John Moss Pete Fun Tom
4 Phill Sam Kale Jack Dallas lil
5 Tim David Sam Dale Simmon Fig", header=TRUE)
使用具有相似前缀的变量名称(如上所述)整理一大组列以同时将它们折叠成更小的列集的最佳方法是什么?即时将所有名字都放在同一列中,将姓氏放在相同但不同的列中,依此类推。输出数据集如下所示:pivot_longer
Status fn ln
cb_1 Jill James
cb_1 Aliya Troy
cb_1 Tom Pete
cb_1 Phill Jack
cb_1 Tim Dale
cb_2 Pete Lil
cb_2 Edy Adam
cb_2 John Son
cb_2 Sam Dallas
cb_2 David Simmon
cb_3 Edy Febe
cb_3 Jill tom
cb_3 Moss Tom
cb_3 Kale Lil
cb_3 Sam Fig
我的斗争不仅是分离名称,而且还要折叠各个列下的某些变量集。
答:
0赞
Mark
7/20/2023
#1
Zephryl 在评论中的回答还不错,但它不适用于您在问题中给出的其他示例,例如 .college_collaborator_1_First_name
下面的代码为您给出的示例和问题中的数据集提供了正确的解决方案。在开始第二组之前,它使用后视来查看数字,然后使用下划线:
pivot_longer(dataset_1, -ID, names_pattern = "(.+)_((?<=\\d_).+)", names_to = c("Status", ".value"))
评论
".value"
names_pattern
df %>% pivot_longer(!ID, names_to = c("Status", ".value"), names_pattern = "(cb_\\d)_(.+)")
?pivot_longer
的 、 和 示例部分会有所帮助。names_to = c("Status", ".value")
Status
names_to
names_pattern