如何根据字符的一部分创建虚拟变量?

How can you make a dummy variable based on part of a character?

我想根据列中是否存在特定单词来创建虚拟变量。 我举了一个例子来阐明它:

source/medium           qr_dummy

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

如果 qr_code 出现在 source/medium 列中,我想要一个 1。我尝试了下面的代码,但是因为 "qr_code" 不匹配它不会给出 1 的确切字符。

df$qr_code_dummy[df$sourceMedium == "qr_code"] <- 1

所以想要的结果如下所示:

source/medium           qr_dummy

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

如评论中@duckmayr所推荐

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 <- structure(list(sourceMedium = structure(1:3, .Label = c("Amsterdam/qr_code", 
"Rotterdam/offline", "Utrecht/online"), class = "factor"), qr_code_dummy = c(1, 
0, 0)), row.names = c(NA, -3L), class = "data.frame")

如前所述,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()

library(dplyr)
library(stringr)

df %>% 
  mutate(qr_code_dummy = as.integer(str_detect(sourceMedium, "qr_code")))