带有子串 R 的 ifelse
ifelse with substring R
这感觉应该是一个简单的问题,但我已经看了这里和其他地方,找不到简单的答案。
我有调查回复,我需要为回复来源创建一个 1/0 虚拟对象。我正在尝试通过查看评论字段中的所有数据来创建一个简单的标志变量,如果子字符串匹配,则将其标记为 1。
数据EG
ID comment
1 rubber chickens
2 180107 RG - email taken from 2017 graduate survey
我需要 R 来查看评论字段,只要它看到短语 'graduate survey' 就将我的 grad_svy 字段编码为 1,否则为 0。
当我写
data$grad_svy <- ifelse((substr(data$comment,34,49) == "graduate survey"),1,0)
它会 运行,但它不会将任何内容标记为 1,而实际上有数百个地方应该标记为 1。我知道两个字母的短语从 34 开始,对于该字段中的每个实例,都以 49 结尾。我不确定我没有做什么,ifelse 和 substring 的常见问题解答非常无用。
您可能希望使用 grepl
和 data.table
来处理此类问题。例如:
library(data.table)
setDT(data)
data[, grad_svy := as.numeric(grepl("graduate survey", comment))]
你可以试试这个,它只使用基数 R:
data$grad_svy <- as.numeric(grepl("graduate survey", data$comment))
如果在 data$comment
中找到模式 "graduate survey"
,grepl
将 return 一个逻辑向量。然后使用 as.numeric
将为您将该逻辑向量转换为数字:1 = TRUE
, 0 = FALSE
这感觉应该是一个简单的问题,但我已经看了这里和其他地方,找不到简单的答案。
我有调查回复,我需要为回复来源创建一个 1/0 虚拟对象。我正在尝试通过查看评论字段中的所有数据来创建一个简单的标志变量,如果子字符串匹配,则将其标记为 1。
数据EG
ID comment
1 rubber chickens
2 180107 RG - email taken from 2017 graduate survey
我需要 R 来查看评论字段,只要它看到短语 'graduate survey' 就将我的 grad_svy 字段编码为 1,否则为 0。
当我写
data$grad_svy <- ifelse((substr(data$comment,34,49) == "graduate survey"),1,0)
它会 运行,但它不会将任何内容标记为 1,而实际上有数百个地方应该标记为 1。我知道两个字母的短语从 34 开始,对于该字段中的每个实例,都以 49 结尾。我不确定我没有做什么,ifelse 和 substring 的常见问题解答非常无用。
您可能希望使用 grepl
和 data.table
来处理此类问题。例如:
library(data.table)
setDT(data)
data[, grad_svy := as.numeric(grepl("graduate survey", comment))]
你可以试试这个,它只使用基数 R:
data$grad_svy <- as.numeric(grepl("graduate survey", data$comment))
如果在 data$comment
中找到模式 "graduate survey"
,grepl
将 return 一个逻辑向量。然后使用 as.numeric
将为您将该逻辑向量转换为数字:1 = TRUE
, 0 = FALSE