首页 > 解决方案 > 带有子字符串 R 的 ifelse

问题描述

感觉这应该是一个简单的问题,但我看过这里和其他地方,找不到简单的答案。

我有调查回复,我需要为回复来源创建一个 1/0 假人。我试图通过查看注释字段中的所有数据来创建一个简单的标志变量,如果子字符串匹配,则将其标记为 1。

数据EG

ID     comment
1      rubber chickens
2      180107 RG - email taken from 2017 graduate survey

我需要 R 来查看评论字段,并且只要它看到短语“研究生调查”将我的 grad_svy 字段编码为 1,否则为 0。

当我写

data$grad_svy <- ifelse((substr(data$comment,34,49) == "graduate survey"),1,0) 

它会运行,但它不会将任何东西标记为 1,而实际上有数百个地方应该标记为 1。我知道这两个字母短语从 34 开始,到 49 结束,对于每个实例场。我不确定我没有做什么,ifelse 和 substring 的常见问题解答非常无用。

标签: rif-statementsubstr

解决方案


你可以试试这个,它只使用基础 R:

data$grad_svy <- as.numeric(grepl("graduate survey", data$comment))

grepl"graduate survey"如果在中找到模式,将返回一个逻辑向量data$comment。然后使用as.numeric会将逻辑向量转换为您的数字: 1 = TRUE, 0 =FALSE


推荐阅读