如何将factor列中的"No contact"替换为0并转换为数值类型?
解决方法
我来帮你搞定这个问题!因为你的列是factor类型,直接转numeric会出两个问题:一是factor转numeric默认会返回水平的编码值,不是你要的实际数值;二是"No contact"这种非数值字符串转numeric会变成NA。所以得按你说的,先替换再转类型,下面给你两种常用的实现方式:
方法一:Base R 原生操作
先把factor列转成字符型,替换掉"No contact"为"0",再转成数值型:
# 先转换为字符向量,替换目标值 df$target_col <- as.character(df$target_col) df$target_col[df$target_col == "No contact"] <- "0" # 再转换为数值型 df$target_col <- as.numeric(df$target_col)
不用担心原factor里的数值水平(比如"123"这种字符形式的数值),转成字符再转numeric会正确识别成对应数值。
方法二:用dplyr(tidyverse)更简洁的链式操作
如果你习惯用tidyverse的语法,这样写更清爽:
library(dplyr) df <- df %>% mutate(target_col = case_when( target_col == "No contact" ~ "0", TRUE ~ as.character(target_col) )) %>% mutate(target_col = as.numeric(target_col))
或者用recode函数更直接:
df <- df %>% mutate(target_col = recode(target_col, "No contact" = "0")) %>% mutate(target_col = as.numeric(as.character(target_col)))
这里要注意,recode之后列还是factor类型,所以需要先转成字符再转numeric。
小提示
操作完之后可以用str(df)检查一下列类型是否成功变成numeric,确保没有问题~
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

