【发布时间】:2019-06-20 18:13:02
【问题描述】:
我有以下数据框:
df <- data.frame(stringsAsFactors=FALSE,
ID = c(2016070707, 2016070707, 2016070707, 2017080808, 2017080808,
2017080808, 2017080808),
team_name = c("Harlequins", "Harlequins", "Harlequins", "Bristol Rugby",
"Bristol Rugby", "Bristol Rugby", "Bristol Rugby"),
player_name = c("Karl Dickson", "Tim Swiel", "Alofa Alofa",
"Jason Woodward", "Jack Wallace", "Will Hurrell",
"Tusi Pisi"),
DGC = c(7, 5, 0, 3, 0, 8, 9),
MR = c(3, 8, 31, 25, 0, 85, 0),
CB = c(2, 9, 1, 13, 0, 0, 0)
)
我想转换成宽版:
new_df <- data.frame(stringsAsFactors=FALSE,
ID = c(2016070707, 2017080808),
team_name = c("Harlequins", "Bristol Rugby"),
player_1 = c("Karl Dickson", "Jason Woodward"),
player_2 = c("Tim Swiel", "Jack Wallace"),
player_3 = c("Alofa Alofa", "Will Hurrell"),
player_4 = c(NA, "Tusi Pisi"),
DGC_1 = c(7, 3),
DGC_2 = c(5, 0),
DGC_3 = c(0, 8),
DGC_4 = c(NA, 9),
MR_1 = c(3, 25),
MR_2 = c(8, 0),
MR_3 = c(31, 85),
MR_4 = c(NA, 0),
CB_1 = c(2, 13),
CB_2 = c(9, 0),
CB_3 = c(1, 0),
CB_4 = c(NA, 0)
)
但是,您可能会看到第一队有 3 名球员,而第二队有 4 名球员。如何将 df 转置为 new_df 并创建这些额外的列,例如 player_4、DGC_4 以防万一球队中的球员人数。并且差异将由“NAs”补偿(就像在 new_df 中一样)。
【问题讨论】:
-
reshape(transform(df,time=ave(ID,ID,FUN=seq)),v.names = 3:ncol(df),idvar = 1,dir='wide')??
标签: r data.table transpose melt dcast