2

だから私はRを使うのが初めてで、かなり単純なタスクに問題があります. 次のように「データ」というdfがあります...

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

また、Data $ Group のある時点で発生するすべての一意の名前の「Player.Names」というベクトルもあります...

        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

greplパターンを '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 に答える