我正在尝试使用 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"))
非常感谢。
答案 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 R
的 grepl
解决方案
df[["guard"]] <- +grepl("^PG|SG", df[["position"]])
正则表达式:grepl
(返回在字符串中找到的模式的布尔值)对于列 ^
中字符串的开头 position
的 'PG' 或 'SG' ({{1} } 将 +
结果变成 TRUE|FALSE
)