如何在R中将多行分组数据转换为多列宽表?
解决方案
你可以通过先为每个书籍的作者添加分组内序号,再使用pivot_wider()实现需求,之前没成功应该是缺少了生成序号的步骤。
代码实现
首先构造你的数据框:
library(tidyverse) df <- tibble( book_title = c("book1", "book1", "book2", "book2", "book2", "book3", "book3"), author = c("bob", "jane", "alice", "fred", "greg", "louise", "sam") )
然后执行转换:
df_wide <- df %>% group_by(book_title) %>% mutate(author_num = paste0("author_", row_number())) %>% ungroup() %>% pivot_wider( names_from = author_num, values_from = author )
运行后得到的df_wide就是你想要的格式:
# A tibble: 3 × 4 book_title author_1 author_2 author_3 <chr> <chr> <chr> <chr> 1 book1 bob jane NA 2 book2 alice fred greg 3 book3 louise sam NA
关键说明
group_by(book_title) %>% mutate(author_num = paste0("author_", row_number())):为每个书籍下的作者按顺序生成author_1、author_2这样的列名标识,这是实现宽格式转换的核心前提。pivot_wider()此时可以根据生成的标识列,将同一书籍的作者分别放到对应的列中,缺失的位置自动填充NA。
内容的提问来源于stack exchange,提问作者Kristina
相关产品推荐
相关产品推荐

