如何从 R 中的列表快速创建虚拟变量

How to quickly create dummy variables from list in R

所以我是 R 的新手,我在完成一个相当简单的任务时遇到了麻烦。我有一个名为 "Data" 的 df,如下所示...

           Group       Score.Diff
Row 1   Kyle, Steve      15
Row 2   Matthew, Tony    12 
...     ...              ...            
Row n   Anthony, Zack    -10

我还有一个名为 "Player.Names" 的向量,其中包含 Data$Group 中某个点出现的所有唯一名称,就像这样...

        Names
Row 1   Anthony
Row 2   Kyle
...     ...
Row n   Zack

我正在努力完成的是在 "Data" 中创建新的列来表示每个唯一的名称,如果名称在 Data$Group 中则值为 1,否则值为 0 .所需的输出如下所示...

           Group       Score.Diff  Anthony  Kyle  Steve ...  Zack
Row 1   Kyle, Steve      15           0      1     1    ...   0
Row 2   Matthew, Tony    12           0      0     0    ...   0
...     ...              ...         ...    ...   ...   ...  ...
Row n   Anthony, Zack    -10          1      0     0    ...   1

我们可以将 grepl 与模式一起用作 'df2' 中的 'Names' 列(用 sapply 循环)到 return [的逻辑向量=22=] 列,使用 as.integercbind 与第一个数据集 ('df1') 强制转换为二进制。

cbind(df1, sapply(df2$Names, function(x) as.integer(grepl(x, df1$Group))))
#               Group Score.Diff Anthony Kyle Zack
#Row 1   Kyle, Steve         15       0    1    0
#Row 2 Matthew, Tony         12       0    0    0
#Row n Anthony, Zack        -10       1    0    1

###数据

df1 <- structure(list(Group = c("Kyle, Steve", "Matthew, Tony",
 "Anthony, Zack"
), Score.Diff = c(15L, 12L, -10L)), .Names = c("Group", "Score.Diff"
), class = "data.frame", row.names = c("Row 1", "Row 2", "Row n"))

df2 <- structure(list(Names = c("Anthony", "Kyle", "Zack")), 
   .Names = "Names", class = "data.frame", row.names = c("Row 1", "Row 2",  "Row n"))