Python 在R中旋转多个列,类似于熊猫

Python 在R中旋转多个列,类似于熊猫,python,r,pandas,Python,R,Pandas,我想在R中透视一个数据帧,类似于熊猫在下面所做的 熊猫 import pandas as pd trials = pd.DataFrame({'id':[1,2,3,4], 'treatment':['A','A', 'B', 'B'], 'gender' :['F','M', 'F', 'M'], 'response':[5,3,8,9]}

我想在R中透视一个数据帧,类似于熊猫在下面所做的

熊猫

import pandas as pd
trials = pd.DataFrame({'id':[1,2,3,4], 
                       'treatment':['A','A', 'B', 'B'],
                       'gender' :['F','M', 'F', 'M'], 
                       'response':[5,3,8,9]}
                      )

trials.pivot(index= 'treatment', columns='gender')
给出以下结果:


编辑:添加data.table和CRAN版本tidyr解决方案

  • CRAN的
    tidyr
    0.8有点笨拙,因为您必须手动组合两个标题(性别以及值是
    id
    还是
    response
    ),然后传播:

    library(tidyr)
    trials %>%
      gather(column, value, -c(treatment, gender)) %>%
      unite(header, column, gender) %>%
      spread(header, value)
    
    #  treatment id_F id_M response_F response_M
    #1         A    1    2          5          3
    #2         B    3    4          8          9
    
  • tidyr
    的开发版本使用新的
    pivot\u wide
    功能使这一点变得更容易:

    # devtools::install_github("tidyverse/tidyr")
    library(tidyr) # Need current development version, as pivot_wider
                   #  not in CRAN release yet. Using 0.8.99.9000 here.
    pivot_wider(trials, names_from = gender, values_from = c(id, response))    
    
    ## A tibble: 2 x 5
    #treatment  id_F  id_M response_F response_M
    #<chr>     <dbl> <dbl>      <dbl>      <dbl>
    #1 A             1     2          5          3
    #2 B             3     4          8          9
    

  • 使用ftable检查?从
    tidyr
    中检查
    spread
    是否需要数据的多行标题?我不知道在R中有什么自然的方法可以做到这一点,尽管有许多用于报告的软件包,可以让您创建一个具有跨多个列的多行标题的输出格式。下面是一个示例:但我不知道在R中有一个数据结构允许这种事情在本地进行。有趣的是,您希望这样做。我对来自R的大熊猫最大的一个问题是它总是在索引事物。
    library(data.table)
    dcast(setDT(trials), treatment ~ gender, value.var = c("id", "response"))
    #   treatment id_F id_M response_F response_M
    #1:         A    1    2          5          3
    #2:         B    3    4          8          9