【问题标题】:How can you make a dummy variable based on part of a character?如何根据角色的一部分制作虚拟变量?
【发布时间】:2020-06-05 12:31:26
【问题描述】:

我想根据列中是否存在特定单词来制作虚拟变量。 我举了一个例子来澄清它:

source/medium           qr_dummy

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

如果源/媒体列中存在 qr_code,我想要一个 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

【问题讨论】:

  • help("grepl")

标签: r text dummy-variable


【解决方案1】:

正如 @duckmayr 在 cmets 中推荐的那样

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")

【讨论】:

  • 类似于 Adam;s answer,您可以直接执行此操作而无需子集; as.integer(grepl("qr_code",df$sourceMedium))
  • @user20650 你甚至可以写grepl("qr_code",df$sourceMedium)*1
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    使用stringr 可能更具可读性。这里是 dplyr 流,但您可以在没有它的情况下使用 str_detect()

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      • 2020-07-07
      • 1970-01-01
      相关资源
      最近更新 更多