如何从 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.integer
和 cbind
与第一个数据集 ('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"))
所以我是 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.integer
和 cbind
与第一个数据集 ('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"))