Ich habe Daten, die zwei Messungen von zwei verschiedenen Gruppen mit einer Anzahl von Proben für jede hat. I einfache Version mit 6 Proben, die jeweils wie folgt aussieht:Wie verwende ich map(), um einen gruppierten Index zu einer Spalte von Datenrahmen hinzuzufügen?
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)))
sondern weil die Messungen in verschiedenen Bedingungen wiederholt worden ist es tatsächlich eine Reihe von ähnlichen Datenrahmen in einer Liste dargestellt:
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)
Letztendlich Ich möchte jeden Datenrahmen in ein breites Format umformen, so dass Vektoren der zwei Messungen für jede Gruppe leicht aus einzelnen Spalten für einen statistischen Vergleich extrahiert werden können. Zum Beispiel:
df %>% unite(group_meas, group, measurement)
%>% spread(group_meas, value)
, die die Liste werden können wie so abgebildet nach unten:
df2 %>% mutate(data = map(data, ~spread(.x, group_meas, value)))
Mein Problem tritt auf, wenn eine Probe mehr gemessen wurde als einmal und dann spread()
funktioniert nicht, weil es
Duplicate identifiers for rows
ich stelle dar, der beste Weg, um dieses ist eine neue Index-Spalte auf der kombinierten Gruppe/measur gruppiert hinzufügen und dies wird eindeutige Zeilenkennungen liefern. Dies funktioniert für einen einzelnen Datenrahmen.
df %>% unite(group_meas, group, measurement) %>%
group_by(group_meas) %>%
mutate(gr_m_index = row_number())
Allerdings kann ich es nicht skalieren, um eine Liste abzubilden.
df2 %>% mutate(data = map(data, ~ group_by(.x, group_meas) %>%
mutate(gr_m_index = row_number())))
Ich denke, das eine tidyeval
Sache sein muss, als ich die folgende Fehlermeldung erhalten was darauf hindeutet, es ist an der falschen Stelle suchen.
Evaluation error: Column
gr_m_index
must be length 24 (the number of rows) or one, not 4.
Wie verwende ich map()
einen gruppierten Index auf eine Spalte von Datenrahmen hinzufügen?