如何根据字符的一部分创建虚拟变量?
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")))
我想根据列中是否存在特定单词来创建虚拟变量。 我举了一个例子来阐明它:
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")))