在R中为多值分隔的语言变量生成英语标识0/1哑变量
R语言多值分隔列生成英文标识列解决方案
你之前使用model.matrix的方法不适用该场景,因为model.matrix会将language_spoken列的每一个完整字符串作为独立分类水平生成哑变量,不会单独匹配字符串中是否包含Eng子串,因此无法得到预期结果。
前置示例数据集构造
data <- data.frame(language_spoken = c("Jap;Fre","Jap;Fre","Fre;Ch","Eng","Eng;Jap","Hindi;Eng","","Eng;Spanish;Fre","Spanish;Jap","Spanish"))
方案1:基础R实现
核心用grepl函数做字符串模式匹配,将返回的逻辑值直接转为整数即可得到0/1标识:
data$Eng <- as.integer(grepl("Eng", data$language_spoken))
方案2:tidyverse生态实现
如果习惯用dplyr和stringr处理数据,可以用以下写法:
library(dplyr) library(stringr) data <- data %>% mutate(Eng = as.integer(str_detect(language_spoken, "Eng")))
最终处理结果
运行上述任意一种方案后,得到的数据框和预期完全一致:
language_spoken Eng 1 Jap;Fre 0 2 Jap;Fre 0 3 Fre;Ch 0 4 Eng 1 5 Eng;Jap 1 6 Hindi;Eng 1 7 0 8 Eng;Spanish;Fre 1 9 Spanish;Jap 0 10 Spanish 0
内容的提问来源于stack exchange,提问作者joy_1379
相关产品推荐
相关产品推荐

