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

如何在R中根据列开头字符创建新列?解决startsWith报错

问题解决方法

错误原因

报错non-character object(s)说明你的Ethnicity列不是字符型(character),大概率是因子型(factor)——R在读取带分类文本的数据时,有时会默认把字符串转成因子,而startsWith只能处理字符向量。

解决方案

步骤1:确认列类型

先执行代码检查Ethnicity的类型:

class(df$Ethnicity)

如果输出是"factor",就需要转成字符型;如果是"character",可以直接看步骤2的完整代码。

步骤2:修正代码

有两种方式处理:

方式一:先转换列类型,再生成Status列
# 先把Ethnicity转成字符型
df$Ethnicity <- as.character(df$Ethnicity)
# 再用case_when生成Status,补充else分支处理非White情况
df %>% mutate(Status = case_when(
  startsWith(Ethnicity, "White") ~ "White",
  TRUE ~ "POC"  # 所有不满足上面条件的都归为POC
))
方式二:在startsWith里直接转换(更简洁)

不需要单独改列,直接在函数里用as.character转换:

df %>% mutate(Status = case_when(
  startsWith(as.character(Ethnicity), "White") ~ "White",
  TRUE ~ "POC"
))

注意点

你原来的代码缺少case_when的else分支,即使没报错,非White的行也会生成NA,所以必须加上TRUE ~ "POC"来覆盖所有其他情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:40:28