如何从R中的两行数据创建一行? (支架示例)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从R中的两行数据创建一行? (支架示例)相关的知识,希望对你有一定的参考价值。
我从一个数据框开始,我们将调用DF1:
Team Stat1 Stat2 Stat3 Stat4 Pod
Georgia 1 3 3 6 1
Nevada 2 2 2 7 2
Clemson 3 1 2 4 2
Texas 5 4 2 3 1
我想只使用统计1,2,3(不是4)。根据“Pod”中的值,我想创建一个包含两个团队的行。每个团队都有Stats 1,2和3.它应该是这样的:
Team1 Stat1A Stat2A Stat3A Team2 Stat1B Stat2B Stat3B
Georgia 1 3 3 Texas 5 4 2
Nevada 2 2 2 Clemson 3 1 2
这应该表明格鲁吉亚和德克萨斯正在互相比赛,内华达和克莱姆森正在比赛,等等。对于锦标赛中的每一轮,我都必须将比赛重新分配给比赛才能进入比赛。所以,在这个非常简化的支架示例中,每个游戏的获胜者都会玩,让我们说格鲁吉亚在决赛中面对克莱姆森来得到这个:
Team1 Stat1A Stat2A Stat3A Team2 Stat1B Stat2B Stat3B
Georgia 1 3 3 Clemson 3 1 2
答案
我们可以使用dcast
的data.table
library(data.table)
dcast(setDT(df1[-5]), Pod ~ LETTERS[rowid(Pod)],
value.var = names(df1)[1:4], sep="")
# Pod TeamA TeamB Stat1A Stat1B Stat2A Stat2B Stat3A Stat3B
#1: 1 Georgia Texas 1 5 3 4 3 2
#2: 2 Nevada Clemson 2 3 2 1 2 2
另一答案
我们可以使用基数R的聚合:
aggregate(.~Pod,df[-5],I)
Pod Team.1 Team.2 Stat1.1 Stat1.2 Stat2.1 Stat2.2 Stat3.1 Stat3.2
1 1 Georgia Texas 1 5 3 4 3 2
2 2 Nevada Clemson 2 3 2 1 2 2
如果您需要完全匹配,那么:
s=do.call(data.frame,aggregate(.~Pod,df[-5],I))
s[c(grep("\.1",names(s)),grep("\.2",names(s)))]
Team.1 Stat1.1 Stat2.1 Stat3.1 Team.2 Stat1.2 Stat2.2 Stat3.2
1 Georgia 1 3 3 Texas 5 4 2
2 Nevada 2 2 2 Clemson 3 1 2
以上是关于如何从R中的两行数据创建一行? (支架示例)的主要内容,如果未能解决你的问题,请参考以下文章