在R中使用不同类型的多个列进行透视 数据

我有两个data.frames,我希望能够使用pivot_widerpivot_longer在两者之间来回切换。我知道单列旋转是如何工作的,但是当我们试图保持主队与主场得分的关系,同时又将其与客队和客场得分分开时,我会感到困惑。

data.frame(GameID=1:2,Home_Team=c("Jazz","rockets"),Home_Score=c(129,94),Away_Team=c("Wizards","Warriors"),Away_Score=c(100,98))

data.frame(GameID=c(1,2,1,2),Location=c("Home","Home","Away","Away"),Team=c("Jazz","rockets","Wizards",Score=c(129,94,100,98))

nhzjc 回答:在R中使用不同类型的多个列进行透视 数据

如果我们需要从第一个数据集更改为第二个数据集,请使用pivot_longer

library(dplyr)
library(tidyr)
library(stringr)
df1 %>%      
  pivot_longer(cols = -GameID,names_to = c("Location",".value"),names_sep="_")
# A tibble: 4 x 4
#  GameID Location Team     Score
#   <int> <chr>    <fct>    <dbl>
#1      1 Home     Jazz       129
#2      1 Away     Wizards    100
#3      2 Home     Rockets     94
#4      2 Away     Warriors    98

从第二个数据集中,可以使用pivot_wider

完成转换
df2 %>%
   pivot_wider(names_from = Location,values_from = c(Team,Score)) %>%
   rename_at(-1,~ str_replace(.,"(.*)_(.*)","\\2_\\1"))
# A tibble: 2 x 5
#  GameID Home_Team Away_Team Home_Score Away_Score
#   <dbl> <fct>     <fct>          <dbl>      <dbl>
#1      1 Jazz      Wizards          129        100
#2      2 Rockets   Warriors          94         98

数据

df1 <- data.frame(GameID=1:2,Home_Team=c("Jazz","Rockets"),Home_Score=c(129,94),Away_Team=c("Wizards","Warriors"),Away_Score=c(100,98))



df2 <- data.frame(GameID=c(1,2,1,2),Location=c("Home","Home","Away","Away"),Team=c("Jazz","Rockets","Wizards",Score=c(129,94,100,98))
本文链接:https://www.f2er.com/3163899.html

大家都在问