You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 00:27:24