ifelse with substring R

时间:2018-05-10 21:00:27

标签: r if-statement substr

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

我有调查回复,我需要为响应源创建一个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的常见问题非常有用。

2 个答案:

答案 0 :(得分:1)

您可能希望使用grepldata.table来完成此类操作。例如:

library(data.table)
setDT(data)
data[, grad_svy := as.numeric(grepl("graduate survey", comment))]

答案 1 :(得分:1)

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

data$grad_svy <- as.numeric(grepl("graduate survey", data$comment))
如果在grepl中找到模式"graduate survey"

data$comment将返回逻辑向量。然后使用as.numeric会将该逻辑向量转换为数字:1 = TRUE,0 = FALSE