如何从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
答案

我们可以使用dcastdata.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中的两行数据创建一行? (支架示例)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中的两行代码之间创建延迟? [复制]

如何在 SQL 查询中的两行上写属性名称

pyspark,比较数据帧中的两行

在 SQL 中排序时如何比较同一表中的两行?

将具有不同值的两行连接在一行中

用C语言怎么把文件中的两行合并成一行