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

R语言data cleaning:处理State列重复/混合州名的实现方案

你之前使用的paste(unique(df$State), collapse=",")是对整列的取值去重后拼接为单个字符串,没有逐行处理State字段的内容,所以无法得到预期结果。

测试数据构造

df <- data.frame(
  ID = 1:6,
  State = c(NA, "IL", "IL,IL,IL", "OH,IL", "NM,NM,AL,AL", "FL,FL,FL")
)

实现方案

方法1:tidyverse 套件实现(可读性高)

library(dplyr)
library(stringr)

df_clean <- df %>%
  # 逐行处理
  rowwise() %>%
  mutate(State = case_when(
    # 保留原生NA
    is.na(State) ~ NA_character_,
    TRUE ~ {
      # 按逗号拆分当前行的State,取唯一值
      unique_states <- unique(unlist(str_split(State, ",")))
      # 唯一值长度为1则返回该州名,否则返回NA
      if(length(unique_states) == 1) unique_states else NA_character_
    }
  )) %>%
  ungroup()

方法2:Base R 实现(无需加载额外包)

df$State <- sapply(df$State, function(x) {
  if(is.na(x)) return(NA)
  unique_states <- unique(strsplit(x, ",")[[1]])
  return(ifelse(length(unique_states) == 1, unique_states, NA))
})

运行上述任意一种方法后,得到的结果和你给出的预期输出完全一致。


内容的提问来源于stack exchange,提问作者Science11

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:09:03