Diese Lösung wird unter Verwendung von Paketen dplyr
, purrr
, tidyr
und ggplot2
(für die Zwecke Plotten).
# example dataset
df = read.table(text = "
name attr1 attr2
supplier1 10 87
supplier1 11 88
supplier1 12 89
supplier1 13 21
supplier2 20 31
supplier2 21 75
supplier2 22 75
supplier3 30 47
supplier3 19 22
", header=T, stringsAsFactors=F)
library(dplyr)
library(purrr)
library(tidyr)
library(ggplot2)
df %>%
group_by(name) %>% # for each supplier
nest() %>% # nest data
mutate(MEANS = map(data, ~ .x %>% summarise_all(mean)), # obtain mean of rest of columns
PLOTS = map2(data, name, # plot data and use the supplier as a title
~ggplot(data = .x) +
geom_point(aes(attr1, attr2)) +
ggtitle(.y))) -> df_upd # save this a new data frame
# # check how your new dataset looks like
df_upd
# # A tibble: 3 x 4
# name data MEANS PLOTS
# <chr> <list> <list> <list>
# 1 supplier1 <tibble [4 x 2]> <tibble [1 x 2]> <S3: gg>
# 2 supplier2 <tibble [3 x 2]> <tibble [1 x 2]> <S3: gg>
# 3 supplier3 <tibble [2 x 2]> <tibble [1 x 2]> <S3: gg>
Für jeden Lieferanten Wert haben Sie Spalte data
(eine Liste von Datenrahmen mit aktuellen Daten), Spalte MEANS
(eine Liste von Datenrahmen mit den berechneten Mittel) und Spalte PLOTS
(eine Liste der Plots Ihrer Daten).
daher so weit haben Sie es geschafft, eine (neu) Datenrahmen mit früheren/Original info (Spalte data
) und berechnet info (Spalten MEANS
und PLOTS
) zu erstellen. Der nächste Schritt ist die neue Informationen in separaten Dateien zu speichern, wie Sie erwähnt haben:
# save each MEANS dataset in a separate file using the corresponding name
map2(df_upd$MEANS, df_upd$name, ~ write.csv(.x, .y, row.names = F))
# save each plot separately using the corresponding name
map2(df_upd$PLOTS, df_upd$name, ~ .x + ggsave(paste0(.y, ".png")))
Beachten Sie, dass die Informationen dieses Datenrahmens wie jeder andere Datenrahmen zugreifen können. Zum Beispiel: df_upd$MEANS
wird Ihnen die Liste der Datenrahmen aller berechneten Mittel wird df_upd$MEANS[df_upd$name == "supplier2"]
Sie geben den vorherigen Informationen für supplier2, df_upd$data[df_upd$name == "supplier3"]
geben Ihnen die (original) Attribute für supplier3 usw.
Lesen Sie mehr über 'split' und 'lapply'. – zx8754
Sind Sie sicher, dass es sich um ein Listenformat und nicht um einen Datenrahmen handelt? – AntoniosK
@AntoniosK Ich denke, sie bedeuten nicht "R Liste Objekt" sondern "Zeilen von Daten". – zx8754