如何在R语言中拆分数据框带数字范围的行并展开
解决数据框中整数范围行的拆分展开问题
输入数据框:
df <- data.frame( A = c("1", "2", "3-5", "6"), B1 = c("a", "b", "c", "d") )
需求是将列A中类似3-5的整数范围条目拆分为连续整数单独成行,同时保留对应行的其他列内容。之前使用separate_longer_delim只能拆分出范围的首尾值,无法填充中间缺失的行。
可以通过以下步骤实现:
- 先将范围格式的条目拆分为起始和结束数值列
- 统一处理非范围条目(起始和结束值相同)
- 基于起始到结束的数值生成完整序列,同时复制其他列内容
完整代码:
library(tidyverse) df %>% # 将A列拆分为起始(start)和结束(end)列,非范围行的end列补NA separate_wider_delim(A, delim = "-", names = c("start", "end"), fill = "right") %>% # 非范围行的end值替换为start,同时将start和end转为整数 mutate( end = ifelse(is.na(end), start, end), across(c(start, end), as.integer) ) %>% # 按每行的起始结束生成完整序列,保留B1列 reframe( A = as.character(seq(start, end)), B1 = B1, .by = everything() )
运行后得到期望输出:
A B1 1 1 a 2 2 b 3 3 c 4 4 c 5 5 c 6 6 d
内容的提问来源于stack exchange,提问作者frapadingue
相关产品推荐
相关产品推荐

