R 连接来自不同季节/年份的两个数据集,与体育相关(例如,NHL,1991年和1992年的季节)
我有NHL团队的数据集,在一定的年限内。我想知道连接这些数据集的最佳方法。例如,我有芝加哥黑鹰队1991年和1992年的统计数据,包括比赛(GP)、胜(W)、负(L)等等 在不创建两个单独的列GP.x和GP.y的情况下,如何将这些集合连接在一起 我使用dput()获得了前十支球队及其各自的统计数据:R 连接来自不同季节/年份的两个数据集,与体育相关(例如,NHL,1991年和1992年的季节),r,dataframe,statistics,dataset,R,Dataframe,Statistics,Dataset,我有NHL团队的数据集,在一定的年限内。我想知道连接这些数据集的最佳方法。例如,我有芝加哥黑鹰队1991年和1992年的统计数据,包括比赛(GP)、胜(W)、负(L)等等 在不创建两个单独的列GP.x和GP.y的情况下,如何将这些集合连接在一起 我使用dput()获得了前十支球队及其各自的统计数据: 我知道加入这些团队可能是。。。很难,但是任何建议/想法都会很好!谢谢 问题是,如果尝试合并、连接或cbind两个具有相同列名的数据帧,则可能会给您提供类似GP.x的列名,而您曾说过不需要这样的
我知道加入这些团队可能是。。。很难,但是任何建议/想法都会很好!谢谢 问题是,如果尝试合并、连接或
cbind
两个具有相同列名的数据帧,则可能会给您提供类似GP.x
的列名,而您曾说过不需要这样的列名,或者在尝试创建具有相同名称的多个列时会抛出错误。您可以验证两个数据框是否具有相同的列名,如下所示:
名称(df91)=名称(df92)
#>[1]真实真实真实
#>[15]真的
#>[29]是的
例如,将所有GP观察值放在一列GP
下更符合逻辑,在该列中,观察值与发生年份进行了划分,而不是两列GP
并且没有明确的方法知道哪一列是哪一年。如果你在收集分数数据,这也不会很好地扩展,我猜在某个时候你会想要比这两年更多的数据
相反,您希望绑定行。您可以为每个数据框指定一列年份,并在基本R中使用rbind
将它们绑定到一个数据框中
df91$year 3 St.Louis Blues*80 47 22 11 105.656 310 250 0.70-0.05 7.00 230
#>4洛杉矶国王队*80 46 24 10 102.638 340 254 1.04-0.04 7.43 252
#>5波士顿布鲁因*80 44 24 12 100.625 299 264 0.32-0.12 7.04 214
#>6卡尔加里火焰*8046268100.6253442630.98-0.037.59236
#>7加拿大蒙特利尔*80 39 30 11 89.556 273 249 0.20-0.10 6.53 201
#>EVGA PP PPO PP%PPA PPOA PK%SH SHA PIM/G oPIM/G S%SA SV%
#> 2 132 87 393 22.14 68 425 84.00 20 10 29.9 28.2 2564 11.1 2214 .905
#> 3 177 70 348 20.11 55 339 83.78 10 18 24.6 25.3 2550 12.2 2345 .893
#> 4 173 80 391 20.46 63 370 82.97 8 18 27.6 30.5 2410 14.1 2412 .895
#> 5 192 74 351 21.08 64 368 82.61 11 8 20.8 23.3 2512 11.9 2240 .882
#> 6 178 91 384 23.70 77 420 81.67 17 8 27.1 25.9 2604 13.2 2200 .880
#> 7 185 66 357 18.49 54 282 80.85 6 10 17.6 19.5 2385 11.4 2316 .892
#>PDO年
#> 2 1991
#> 3 1991
#> 4 1991
#> 5 1991
#> 6 1991
#> 7 1991
或者,您可以使用dplyr
的bind_rows
和mutate
一步创建年份列bind_rows
的另一个优点是不限于2个参数,因此,如果您拥有的数据超过了这两年的数据量,则可以对其进行缩放
df_dplyr团队总成,包括临时技术秘书处%GF GA SRS SOS TG/G EVGF
#>1芝加哥黑鹰队*80 49 23 8 106.663 284 211 0.85-0.06 6.19 177
#>2圣路易斯蓝调*80 47 22 11 105.656 310 250 0.70-0.05 7.00 230
#>3洛杉矶国王队*80 46 24 10 102.638 340 254 1.04-0.04 7.43 252
#>4波士顿布鲁因*80 44 24 12 100.625 299 264 0.32-0.12 7.04 214
#>5卡尔加里火焰*8046268100.6253442630.98-0.037.59236
#>6加拿大蒙特利尔*80 39 30 11 89.556 273 249 0.20-0.10 6.53 201
#>EVGA PP PPO PP%PPA PPOA PK%SH SHA PIM/G oPIM/G S%SA SV%
#> 1 132 87 393 22.14 68 425 84.00 20 10 29.9 28.2 2564 11.1 2214 .905
#> 2 177 70 348 20.11 55 339 83.78 10 18 24.6 25.3 2550 12.2 2345 .893
#> 3 173 80 391 20.46 63 370 82.97 8 18 27.6 30.5 2410 14.1 2412 .895
#> 4 192 74 351 21.08 64 368 82.61 11 8 20.8 23.3 2512 11.9 2240 .882
#> 5 178 91 384 23.70 77 420 81.67 17 8 27.1 25.9 2604 13.2 2200 .880
#> 6 185 66 357 18.49 54 282 80.85 6 10 17.6 19.5 2385 11.4 2316 .892
#>PDO年
#> 1 1991
#> 2 1991
#> 3 1991
#> 4 1991
#> 5 1991
#> 6 1991
由(v0.2.0)于2018年6月18日创建。问题是,尝试合并、连接或
cbind
两个具有相同列名的数据帧,或者会给您提供您不想要的GP.x
等列名,或者在尝试创建具有相同名称的多个列时会抛出错误。您可以验证两个数据框是否具有相同的列名,如下所示:
名称(df91)=名称(df92)
#>[1]真实真实真实
#>[15]真的
#>[29]是的
例如,将所有GP观察值放在一列GP
下更符合逻辑,在该列中,观察值与发生年份进行了划分,而不是两列GP
并且没有明确的方法知道哪一列是哪一年。如果你在收集分数数据,这也不会很好地扩展,我猜在某个时候你会想要比这两年更多的数据
相反,您希望绑定行。您可以为每个数据框指定一列年份,并在基本R中使用rbind
将它们绑定到一个数据框中
df91$year 3 St.Louis Blues*80 47 22 11 105.656 310 250 0.70-0.05 7.00 230
#>4洛杉矶国王队*80 46 24 10 102.638 340 254 1.04-0.04 7.43 252
#>5波士顿布鲁因*80 44 24 12 100.625 299 264 0.32-0.12 7.04 214
#>6卡尔加里火焰*8046268100.6253442630.98-0.037.59236
#>7加拿大蒙特利尔*80 39 30 11 89.556 273 249 0.20-0.10 6.53 201
#>EVGA PP PPO PP%PPA PPOA PK%
# 1991 team stats - first ten teams
structure(list(Team = c("Chicago Blackhawks*", "St. Louis Blues*",
"Los Angeles Kings*", "Boston Bruins*", "Calgary Flames*",
"Montreal Canadiens*", "Pittsburgh Penguins*", "New York Rangers*",
"Washington Capitals*", "Buffalo Sabres*"),
GP = c("80", "80", "80", "80", "80", "80", "80", "80", "80", "80"),
W = c("49", "47", "46", "44", "46", "39", "41", "36", "37", "31"),
L = c("23", "22", "24", "24", "26", "30", "33", "31", "36", "30"),
T = c("8", "11", "10", "12", "8", "11", "6", "13", "7", "19"),
Pts = c("106", "105", "102", "100", "100", "89", "88", "85", "81","81"),
`Pts %` = c(".663", ".656", ".638", ".625", ".625", ".556", ".550",
".531", ".506", ".506"),
GF = c("284", "310", "340", "299", "344", "273", "342", "297", "258",
"292"),
GA = c("211", "250", "254", "264", "263", "249", "305", "265", "258",
"278"),
SRS = c("0.85", "0.70", "1.04",
"0.32", "0.98", "0.20", "0.42", "0.36", "0.00", "0.08"),
SOS = c("-0.06", "-0.05", "-0.04", "-0.12", "-0.03", "-0.10", "-0.04",
"-0.04", "0.00", "-0.09"),
`TG/G` = c("6.19", "7.00", "7.43", "7.04", "7.59", "6.53", "8.09",
"7.03", "6.45", "7.13"),
EVGF = c("177", "230", "252", "214", "236", "201", "241", "197", "181",
"204"),
EVGA = c("132", "177", "173", "192", "178", "185", "220", "182", "199",
"208"),
PP = c("87", "70", "80", "74", "91", "66", "89", "91", "64", "73"),
PPO = c("393", "348", "391", "351", "384", "357", "388", "389", "340",
"400"),
`PP%` = c("22.14", "20.11", "20.46", "21.08", "23.70", "18.49", "22.94",
"23.39", "18.82", "18.25"),
PPA = c("68", "55", "63", "64", "77", "54", "73", "73", "44", "62"),
PPOA = c("425", "339", "370", "368", "420", "282", "351", "362", "314",
"368"),
`PK%` = c("84.00", "83.78", "82.97", "82.61", "81.67", "80.85", "79.20",
"79.83", "85.99", "83.15"),
SH = c("20", "10", "8", "11", "17", "6", "12", "9", "13", "15"),
SHA = c("10", "18", "18", "8", "8", "10", "12", "10", "15", "8"),
`PIM/G` = c("29.9", "24.6", "27.6", "20.8", "27.1", "17.6", "20.4",
"23.4", "22.8", "21.3"),
`oPIM/G` = c("28.2", "25.3", "30.5", "23.3", "25.9", "19.5", "21.3",
"24.1", "25.3", "22.1"),
S = c("2564", "2550", "2410", "2512", "2604", "2385", "2416", "2444",
"2370", "2410"),
`S%` = c("11.1", "12.2", "14.1", "11.9", "13.2", "11.4", "14.2", "12.2",
"10.9", "12.1"),
SA = c("2214", "2345", "2412", "2240", "2200", "2316", "2723", "2550",
"2112", "2432"),
`SV%` = c(".905", ".893", ".895", ".882", ".880", ".892",
".888", ".896", ".878", ".886"),
PDO = c("", "", "", "", "", "", "", "", "", "")),
.Names = c("Team", "GP", "W", "L", "T", "Pts", "Pts %", "GF", "GA",
"SRS", "SOS", "TG/G", "EVGF", "EVGA", "PP", "PPO", "PP%", "PPA",
"PPOA", "PK%", "SH", "SHA", "PIM/G", "oPIM/G", "S", "S%", "SA",
"SV%", "PDO"),
row.names = 2:11, class = "data.frame")
# 1992 team stats - first ten teams
structure(list(Team = c("New York Rangers*", "Washington Capitals*",
"Detroit Red Wings*", "Vancouver Canucks*", "Montreal Canadiens*",
"Pittsburgh Penguins*", "Chicago Blackhawks*", "New Jersey Devils*",
"Boston Bruins*", "Los Angeles Kings*"),
GP = c("80", "80", "80",
"80", "80", "80", "80", "80", "80", "80"),
W = c("50", "45", "43", "42", "41", "39", "36", "38", "36", "35"),
L = c("25", "27", "25", "26", "28", "32", "29", "31", "32", "31"),
T = c("5", "8", "12", "12", "11", "9", "15", "11", "12", "14"),
Pts = c("105", "98", "98", "96", "93", "87", "87", "87", "84", "84"),
`Pts %` = c(".656", ".613", ".613", ".600", ".581", ".544", ".544",
".544", ".525", ".525"),
GF = c("321", "330", "320", "285", "267", "343", "257", "289", "270",
"287"),
GA = c("246", "275", "256", "250",
"207", "308", "236", "259", "275", "296"),
SRS = c("1.02", "0.78", "0.74", "0.31", "0.64", "0.52", "0.22", "0.48",
"-0.09", "-0.19"),
SOS = c("0.08", "0.09", "-0.06", "-0.13", "-0.12", "0.08", "-0.04",
"0.10", "-0.03", "-0.08"),
`TG/G` = c("7.09", "7.56", "7.20", "6.69", "5.93", "8.14", "6.16",
"6.85", "6.81", "7.29"),
EVGF = c("226", "224", "230", "188", "189", "235", "165", "215", "186",
"197"),
EVGA = c("174", "200", "171", "167", "142", "217", "150", "181", "189",
"208"),
PP = c("81", "92", "72", "85", "74", "92", "81", "59", "77", "79"),
PPO = c("387", "412", "386", "439", "379", "423", "467", "338", "406",
"411"),
`PP%` = c("20.93", "22.33", "18.65", "19.36", "19.53", "21.75", "17.34",
"17.46", "18.97", "19.22"),
PPA = c("60", "60", "78", "76", "60", "77", "76", "68", "72", "76"),
PPOA = c("395", "368", "419", "382", "320", "383", "482", "374", "363",
"417"),
`PK%` = c("84.81", "83.70", "81.38", "80.10", "81.25", "79.90",
"84.23", "81.82", "80.17", "81.77"),
SH = c("14", "14", "18",
"12", "4", "16", "11", "15", "7", "11"),
SHA = c("12", "15",
"7", "7", "5", "14", "10", "10", "14", "12"),
`PIM/G` = c("22.4", "21.8", "25.6", "25.7", "19.3", "23.7", "33.0",
"20.0", "21.8", "26.9"),
`oPIM/G` = c("24.1", "24.2", "23.9", "28.4", "22.0",
"23.9", "31.8", "20.4", "23.7", "25.6"),
S = c("2632", "2481", "2478", "2669", "2443", "2542", "2646", "2495",
"2664", "2419"),
`S%` = c("12.2", "13.3", "12.9", "10.7", "10.9", "13.5", "9.7",
"11.6", "10.1", "11.9"),
SA = c("2543", "2270", "2238", "2299", "2227", "2518", "2028", "2290",
"2339", "2663"),
`SV%` = c(".903", ".879", ".886", ".891", ".907", ".878", ".884",
".887", ".882", ".889"),
PDO = c("", "", "", "", "", "", "", "", "", "")),
.Names = c("Team", "GP", "W", "L", "T", "Pts", "Pts %", "GF", "GA",
"SRS", "SOS", "TG/G", "EVGF", "EVGA", "PP", "PPO", "PP%", "PPA",
"PPOA", "PK%", "SH", "SHA", "PIM/G", "oPIM/G", "S", "S%", "SA",
"SV%", "PDO"),
row.names = 2:11, class = "data.frame")