首页 > 解决方案 > 如何根据列中的变量转换 R 中的列/行

问题描述

我想根据不同列中的变量来改变我的数据框的外观。数据框如下所示:

Date          VH      Team
2016-10-25    V       NYK
2016-10-25    H       CLE
2016-10-25    V       GSW
2016-10-25    H       CHI
2016-10-26    V       UTA
2016-10-26    H       POR

我想将 VH 和 Team 列分成 VisitorTeam 和 HomeTeam,所以我的数据框看起来像这样:

Date          VisitorTeam  HomeTeam
2016-10-25    NYK          CLE
2016-10-25    GSW          CHI
2016-10-26    UTA          POR

此代码在一定程度上有效:

reshape = reshape(transform(nbaodds, time = 
                              as.numeric(factor(VH))), 
                  idvar = "Date", dir = "wide")

由于 ID Var 是日期并且它有两个“2016-10-25”实例,因此它只包含第一个实例,而不包含当天发生的另一个游戏。所以输出只有

Date          VisitorTeam  HomeTeam
2016-10-25    NYK          CLE
2016-10-26    UTA          POR

任何人都知道如何修复此代码或有不同的代码可以将数据迁移到新列?

标签: rdataframe

解决方案


既然你说订单是 100% 正确的,这将是一个可能的解决方案

library(dplyr)
library(tidyr)

t %>% 
  dplyr::mutate(ID = dplyr::row_number()) %>% 
  dplyr::mutate(ID = ifelse(ID %% 2 == 0, ID - 1, ID)) %>% 
  tidyr::pivot_wider(names_from = VH, values_from = Team)

我使用行号作为 ID 并从每个偶数中减去 1 - 这样你就有了 tidyr::pivot_wider 可以用来区分主客场球队的匹配标识符


推荐阅读