R语言拆分单元格字符串复制行时保留空值行的解决方法
问题原因
unnest() 默认会丢弃列表列中长度为0的元素。对空字符串调用strsplit(..., " & ")会返回长度为0的字符向量,因此原表中Package为空的行会在展开操作时被剔除。
解决方案
在unnest()中设置keep_empty = TRUE即可保留拆分后无内容的行,修改后的代码如下:
library(dplyr) library(tidyr) library(stringr) library(randomNames) # 构造示例数据 Client <- LETTERS[seq(1:6)] Package <- c("1", "1 & 2", "2", "1 & 2","1 & 2", "") Scope <- c("full", "rapid", "partial", "full", "full", "") Assignee <- randomNames(6) df <- data.frame(Client, Package, Scope, Assignee) # 拆分并保留空行 df %>% mutate(Package = strsplit(as.character(Package), " & ")) %>% unnest(Package, keep_empty = TRUE)
运行后得到的结果共9行,Client为F的空Package行完整保留:
# A tibble: 9 × 4 Client Package Scope Assignee <chr> <chr> <chr> <chr> 1 A 1 full Young, Devante 2 B 1 rapid Catholic, Kori 3 B 2 rapid Catholic, Kori 4 C 2 partial Maxwell, Luke 5 D 1 full Vanzant, Giovanni 6 D 2 full Vanzant, Giovanni 7 E 1 full el-Sadiq, Aaida 8 E 2 full el-Sadiq, Aaida 9 F "" "" el-Yousef, Muneera
如果希望空值以R标准缺失值NA形式存储,而非空字符串,可以在拆分前先做一步替换:
df %>% mutate( Package = as.character(Package), Package = ifelse(Package == "", NA_character_, Package), Package = strsplit(Package, " & ") ) %>% unnest(Package, keep_empty = TRUE)
内容的提问来源于stack exchange,提问作者ks54
相关产品推荐
相关产品推荐

