我有两个测量数据在两个不同的组上,每个组有多个样本。我简单的版本有6个样品每一个看起来是这样的:如何使用map()将分组索引添加到数据框的列中?
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()
不起作用,因为有我的问题出现
Duplicate identifiers for rows
我想最好的解决办法是添加一个新的索引列,分组在合并组/ measur这将提供唯一的行标识符。这适用于单个数据框。
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
东西,因为我碰到下面的错误提示是找错了地方。如何使用map()
将分组索引添加到数据框的列?