如何将R语言宽格式数据集转换为含每日访问量的长格式表
简洁实现R数据框从宽格式到长日期-访问量格式的转换
针对你提供的数据集(每行对应一周起始日期,visits列以字符串存储每日访问量),可以用tidyverse工具链快速完成转换,无需冗长代码:
完整代码
library(tidyverse) # 原始数据构造 week <- seq(as.Date("2022-9-1"), as.Date("2022-10-1"), by = "weeks") visits <- c("[1,2,6,4,6,11,19]", "[12,2,7,8,6,11,22]", "[8,2,5,8,4,15,13]", "[9,2,7,4,6,11,7]", "[25,34]") data <- data.frame(week, visits) # 核心转换逻辑 result <- data %>% # 移除字符串中的方括号 mutate(visits = str_remove_all(visits, "\\[|\\]")) %>% # 将逗号分隔的访问量拆分为单独行 separate_rows(visits, sep = ",") %>% # 转换访问量为数值类型 mutate(visits = as.integer(visits)) %>% # 按周分组,生成对应日期(周起始日 + 行偏移天数) group_by(week) %>% mutate(date = week + row_number() - 1) %>% ungroup() %>% # 整理列顺序并按日期排序 select(date, visits) %>% arrange(date) # 查看结果 head(result)
关键步骤说明
- 清理字符串:用
str_remove_all剔除visits列的方括号,为拆分做准备 - 拆分行:
separate_rows直接将逗号分隔的字符串拆分为多行,自动匹配每组的周起始日期 - 生成日期:按周分组后,利用
row_number()计算每个访问量对应的日期偏移(第n个访问量对应周起始日+n-1天) - 整理输出:选择目标列并按日期排序,得到符合要求的长格式数据表
内容的提问来源于stack exchange,提问作者Rachel Zhang
相关产品推荐
相关产品推荐

