如何在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
相关产品推荐
相关产品推荐

