So I am new to using R and I am having trouble with a rather simple task. I have a df called "Data" as follows...
Group Score.Diff
Row 1 Kyle, Steve 15
Row 2 Matthew, Tony 12
... ... ...
Row n Anthony, Zack -10
I also have a vector called "Player.Names" of all unique names that occur at some point in Data$Group like so...
Names
Row 1 Anthony
Row 2 Kyle
... ...
Row n Zack
What I am struggling to accomplish is to create new columns in "Data" that represent each unique name and contain a value of 1 if the name is in Data$Group and a value of 0 if it is not. The desired output is shown below...
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
We can use grepl
with patterns as the Names' column in 'df2' (looped with
sapply ) to return a logical vector for the 'Group' column, coerce to binary with
as.integer and
cbind` with the first dataset ('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"))
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.