Python 在R中旋转多个列,类似于熊猫
我想在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]}
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解决方案
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