【发布时间】:2018-06-07 22:11:21
【问题描述】:
我遇到了一个困难的数据框问题,我试图从现有的数据框创建新的列/列名/列值,但该数据框的格式不是我想要的那样。数据同时包含 4 个不同玩家的 playerID 和 playerTypes,如下所示:
dput(my.player.data)
structure(list(p_id = c(8470828L, 8478460L, 8470966L, 8475314L,
8476472L, 8476917L, 8475791L, 8470105L, 8476905L, 8474152L, 8470642L,
8479325L, 8475218L, 8471296L, 8476874L, 8477943L, 8477934L, 8473432L
), pType = c("Blocker", "Shooter", "Blocker", "Shooter", "Blocker",
"Hitter", "Blocker", "Shooter", "PlayerID", "PlayerID", "Shooter",
"Hitter", "PlayerID", "Blocker", "Shooter", "Scorer", "Scorer",
"Scorer"), p_id1 = c(8475172L, 8470645L, 8474162L, NA, 8480172L,
8477989L, 8476879L, NA, NA, NA, NA, 8474683L, NA, 8476851L, 8469514L,
8477407L, 8478402L, 8474091L), pType1 = c("Shooter", "Goalie",
"Shooter", NA, "Shooter", "Hittee", "Shooter", NA, NA, NA, NA,
"Hittee", NA, "Shooter", "Goalie", "Assist", "Assist", "Assist"
), p_id2 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, 8475246L, 8471729L, 8477018L), pType2 = c(NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Assist",
"Assist", "Assist"), p_id3 = c(NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, 8475622L, 8471239L, 8469608L), pType3 = c(NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Goalie",
"Goalie", "Goalie")), .Names = c("p_id", "pType", "p_id1", "pType1",
"p_id2", "pType2", "p_id3", "pType3"), row.names = c(1L, 5001L,
10001L, 15001L, 20001L, 25001L, 30001L, 35001L, 40001L, 45001L,
50001L, 55001L, 60001L, 65001L, 70001L, 47329L, 46786L, 45551L
), class = "data.frame")
# ignore that the row numbers are 1, 5000, 10000, etc.
head(my.player.data)
p_id pType p_id1 pType1 p_id2 pType2 p_id3 pType3
1 8470828 Blocker 8475172 Shooter NA <NA> NA <NA>
5001 8478460 Shooter 8470645 Goalie NA <NA> NA <NA>
10001 8470966 Blocker 8474162 Shooter NA <NA> NA <NA>
15001 8475314 Shooter NA <NA> NA <NA> NA <NA>
20001 8476472 Blocker 8480172 Shooter NA <NA> NA <NA>
25001 8476917 Hitter 8477989 Hittee NA <NA> NA <NA>
在我的 4 个 pType 列(Blocker、Shooter、Goalie 等)中,我的数据中只有固定数量的 pType,我想为每一个列创建一个列,列中的值等于相应的 playerID。
例如,我想要这样的东西:
head(better.player.data)
Blocker Shooter Hittee Hitter Assist1 Assist2 Scorer Goalie
1 8470828 8475172 NA NA NA NA NA NA
5001 NA 8478460 NA NA NA NA NA 8470645
10001 8470966 8474162 NA NA NA NA NA NA
15001 NA 8475314 NA NA NA NA NA NA
20001 8476472 8480172 NA NA NA NA NA NA
25001 NA NA 8477989 8476917 NA NA NA NA
这里的主要边缘情况是 Assist1 和 Assist2 在 my.player.data 数据帧中都被标记为 Assist(请参阅最后 3 行,在 head() 中未显示)。我希望 p_id1 为 Assist1,p_id2 为 Assist2(pType1 和 pType2 应该是原始数据中唯一的 2 列,其中值为 Assist(不应在 pType 或 pType3 中)
对此的任何帮助,一如既往,非常感谢!谢谢!
【问题讨论】:
-
我正在研究一个使用 reshape2::dcast 的解决方案 - 希望很快就会发布一些内容
-
dcast 不像我希望的那样简单......
-
你真的需要
PlayerID这样的专栏吗?我不认为,PlayerID的存在虽然很有意义。
标签: r dplyr data-manipulation