R:根据某些字符创建新的虚拟变量列
R: Creating new dummy variable column based on certain characters
我正在尝试使用 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"))
非常感谢。
我们可以提取第一个单词然后使用%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"))
基于grepl
的另一个base R
解决方案
df[["guard"]] <- +grepl("^PG|SG", df[["position"]])
正则表达式:grepl
(returns bool for pattern found in string)for 'PG' or 'SG' at the beginning of a string in column ^
position
(+
将 TRUE|FALSE
结果变成 1|0
)
我正在尝试使用 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"))
非常感谢。
我们可以提取第一个单词然后使用%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"))
基于grepl
base R
解决方案
df[["guard"]] <- +grepl("^PG|SG", df[["position"]])
正则表达式:grepl
(returns bool for pattern found in string)for 'PG' or 'SG' at the beginning of a string in column ^
position
(+
将 TRUE|FALSE
结果变成 1|0
)