2

所以我是使用 R 的新手,但我在完成一项相当简单的任务时遇到了麻烦。我有一个名为“数据”的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$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
4

1 回答 1

1

我们可以使用greplwith 模式作为 'df2' 中的 'Names' 列(用 循环sapply)来返回 'Group' 列的逻辑向量,使用第一个数据集('df1')强制转换为as.integer二进制cbind

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"))
于 2016-08-06T19:51:47.587 回答