R:根据某些字符创建新的虚拟变量列

时间:2021-05-09 22:18:39

标签: r dummy-variable

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

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

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

此外,如果有两个位置组合在一起(例如“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"))

非常感谢。

2 个答案:

答案 0 :(得分:0)

我们可以提取第一个单词然后使用%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"))

答案 1 :(得分:0)

另一个基于 base Rgrepl 解决方案

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

正则表达式:grepl(返回在字符串中找到的模式的布尔值)对于列 ^ 中字符串的开头 position 的 'PG' 或 'SG' ({{1} } 将 + 结果变成 TRUE|FALSE)