【问题标题】:R: Creating new dummy variable column based on certain charactersR:根据某些字符创建新的虚拟变量列
【发布时间】:2021-05-09 22:18:39
【问题描述】:

我正在尝试使用 R 向我的数据框添加一个新的虚拟变量列。标准将基于篮球运动员的位置。

我还是想保留位置栏,作为参考。

虚拟变量,guard = 1 表示“PG”(控球后卫)和“SG”(得分后卫),=0 表示“SF”、“PF”和“C”

此外,如果有两个位置组合(例如“SG-SF”),请仅使用第一个位置(例如“SG”)。

df <- data.frame (player = c("a","b","c","d","e","f","g"),
position = c("PF","SF","PG-SG", "SG-SF", "C", "PF", "SF-PF"))

非常感谢。

【问题讨论】:

  • 在你的逻辑中,'SG' 被重复用于守卫 1 和 0
  • df$guard &lt;- +grepl('PG|SG', df$position) 会做的事情

标签: r dummy-variable


【解决方案1】:

我们可以提取第一个单词然后使用%in%,然后用as.integer or +`强制转换为二进制

library(dplyr)
library(stringr)
df <- df %>% 
     mutate(guard = +(str_extract(position, "\\w+") %in% c("PG", "SG")))

-输出

#   player position guard
#1      a       PF     0
#2      b       SF     0
#3      c  PG - SG     1
#4      d    SG-SF     1
#5      e        C     0
#6      f       PF     0
#7      g    SF-PF     0

或使用base R

df$guard <- +(sub("\\s*-\\s*.*", "", df$position) %in% c("PG", "SG"))

【讨论】:

    【解决方案2】:

    基于grepl的另一个base R解决方案

    df[["guard"]] <- +grepl("^PG|SG", df[["position"]])
    

    正则表达式:grepl(返回在字符串中找到的模式的布尔值)在 position 列中字符串的开头 ^ 处的“PG”或“SG”(+TRUE|FALSE 结果转换为1|0)

    【讨论】:

      猜你喜欢
      • 2019-11-21
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 2021-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多