【发布时间】:2018-02-20 09:47:30
【问题描述】:
我的数据有两个不同组的两个测量值,每个组有多个样本。我的简单版本有 6 个样本,每个样本如下所示:
library(tidyverse)
df <- tibble(group = c(rep("group_A", 12), rep("group_B", 12)),
sample = rep(1:6, 4),
measurement = rep(c(rep("meas_A", 6), rep("meas_B", 6)), 2),
value = round(runif(24, min = 0, max = 60)))
但由于测量是在不同条件下重复的,它实际上是一系列相似的数据帧,以列表的形式表示:
df2 <- bind_rows(df,df,df,df) %>%
mutate(condition = c(rep("One", 24), rep("Two", 24),
rep("Three", 24), rep("Four", 24))) %>%
unite(group_meas, group, measurement) %>%
nest(-condition)
最终,我想将每个数据框重塑为宽格式,以便可以轻松地从单个列中提取每个组的两个测量值的向量以进行统计比较。例如:
df %>% unite(group_meas, group, measurement)
%>% spread(group_meas, value)
可以像这样映射到列表中:
df2 %>% mutate(data = map(data, ~spread(.x, group_meas, value)))
我的问题出现在多次测量样本时,然后spread() 不起作用,因为有
行的重复标识符
我认为解决此问题的最佳方法是添加一个按组合组/度量分组的新索引列,这将提供唯一的行标识符。这适用于单个数据框。
df %>% unite(group_meas, group, measurement) %>%
group_by(group_meas) %>%
mutate(gr_m_index = row_number())
但是我无法将其缩放以映射到列表中。
df2 %>% mutate(data = map(data, ~ group_by(.x, group_meas) %>%
mutate(gr_m_index = row_number())))
我认为这一定是 tidyeval 的事情,因为我收到以下错误,表明它在错误的位置。
求值错误:
gr_m_index列的长度必须为 24( 行)或一个,而不是 4 个。
如何使用map() 为一列数据框添加分组索引?
【问题讨论】: