R语言拆分多列分隔值后如何实现每行仅保留一个观测值
R语言实现多列分隔值拆分每行仅保留一个观测的方案
可以通过长宽格式转换的逻辑实现需求,完整tidyverse实现代码如下:
library(tidyverse) # 核心处理逻辑 data %>% select(Name, A, B, C) %>% # 将目标列转为长格式,避免多列同时拆分出现同一行多值 pivot_longer(cols = c(A, B, C), names_to = "col_name", values_to = "col_val") %>% # 按分号拆分单个列的值为独立行 separate_rows(col_val, sep = ";") %>% # 过滤空值与缺失值,仅保留有效观测 filter(col_val != "" & !is.na(col_val)) %>% # 转回宽格式,每行仅保留一个非空观测 pivot_wider(names_from = col_name, values_from = col_val) %>% # 可选步骤:将缺失值替换为空字符串,匹配示例输出格式 mutate(across(c(A, B, C), ~replace_na(.x, "")))
逻辑说明
- 先把A、B、C三列从宽格式转为长格式,让每个列的所有值独立为单独的行,从根源上避免多列同时拆分导致同一行出现多个非空值的问题
- 仅对统一的值列做分隔拆分和空值过滤,保证所有留存的都是有效观测
- 转回宽格式时,每个有效观测会自动独占一行,其余列自动填充为缺失值,按需替换为空字符串即可匹配期望输出格式
用你给出的示例输入运行上述代码,可直接得到你需要的输出结果,同时兼容原始数据中多列本身包含多个分隔值的场景。
内容的提问来源于stack exchange,提问作者shadow6810
相关产品推荐
相关产品推荐

