R 如何基于角色的一部分生成虚拟变量?

R 如何基于角色的一部分生成虚拟变量?,r,text,dummy-variable,R,Text,Dummy Variable,我想根据列中是否存在特定单词来生成虚拟变量。 我举了一个例子来说明这一点: source/medium qr_dummy Amsterdam/qr_code 0 Rotterdam/offline 0 Utrecht/online 0 如果源/中列中存在qr_代码,我希望得到1。我尝试了下面的代码,但因为qr_代码与确切的字符不匹配,所以它不会给出1 df$qr_code_dummy[df$sourceMed

我想根据列中是否存在特定单词来生成虚拟变量。 我举了一个例子来说明这一点:

source/medium           qr_dummy

Amsterdam/qr_code          0 
Rotterdam/offline          0
Utrecht/online             0

如果源/中列中存在qr_代码,我希望得到1。我尝试了下面的代码,但因为qr_代码与确切的字符不匹配,所以它不会给出1

df$qr_code_dummy[df$sourceMedium == "qr_code"] <- 1
如评论中所述

df$qr_code_dummy[grepl("qr_code",df$sourceMedium)] <- 1

       sourceMedium qr_code_dummy
1 Amsterdam/qr_code             1
2 Rotterdam/offline             0
3    Utrecht/online             0
数据:

如评论中所述

df$qr_code_dummy[grepl("qr_code",df$sourceMedium)] <- 1

       sourceMedium qr_code_dummy
1 Amsterdam/qr_code             1
2 Rotterdam/offline             0
3    Utrecht/online             0
数据:


如前所述,grepl是一个不错的选择。下面是一个使用dplyr和ifelse将布尔值更改为0和1的示例

library(dplyr)
df <- data.frame(sourceMedium = c('Amsterdam/qr_code','Rotterdam/offline','Utrecht/online'))
summary <- df %>% mutate(qr_code_dummy = ifelse(grepl('qr_code', sourceMedium), 1, 0))
summary

#       sourceMedium qr_code_dummy
# 1 Amsterdam/qr_code            1
# 2 Rotterdam/offline            0
# 3    Utrecht/online            0

如前所述,grepl是一个不错的选择。下面是一个使用dplyr和ifelse将布尔值更改为0和1的示例

library(dplyr)
df <- data.frame(sourceMedium = c('Amsterdam/qr_code','Rotterdam/offline','Utrecht/online'))
summary <- df %>% mutate(qr_code_dummy = ifelse(grepl('qr_code', sourceMedium), 1, 0))
summary

#       sourceMedium qr_code_dummy
# 1 Amsterdam/qr_code            1
# 2 Rotterdam/offline            0
# 3    Utrecht/online            0

使用stringr可能更具可读性。这里它位于dplyr流中,但是您可以使用str_detect而不使用它

图书馆弹琴 图书馆长 df%>% mutateqr\u code\u dummy=as.integerstr\u检测源介质,qr\u码
使用stringr可能更具可读性。这里它位于dplyr流中,但是您可以使用str_detect而不使用它

图书馆弹琴 图书馆长 df%>% mutateqr\u code\u dummy=as.integerstr\u检测源介质,qr\u码
参见helpgreplSee helpgrepllike to Adam;答案是,您可以直接执行此操作,而无需子集;as.INTEGERGREPLR\U码,df$sourceMedium@user20650您甚至可以编写greplqr_代码,df$sourcemedia*1类似于Adam;答案是,您可以直接执行此操作,而无需子集;as.INTEGERGREPLR\U码,df$sourceMedium@user20650您甚至可以编写greplqr_代码,df$sourcemedia*1