R 列表:使用母列表的子列表

R 列表:使用母列表的子列表,r,list,R,List,我有一个类似这样的列表(实际上非常大) 我需要与每个供应商分别工作 假设我需要计算每个供应商的平均值并绘制一张图。 此外,假设我需要用供应商的名称(我应该从列表中获取)保存每个mean(txt文件)和每个图形(pdf/jpeg文件) 我对R很陌生,如果你能解释的话,我将非常感激 我相信这个问题肯定有重复的地方。然而,由于这个问题要求为每个聚合级别创建单独的输出文件,我不确定是否容易找到重复 您可以尝试按照以下建议进行操作: library(data.table) setDT(DF)[, lapp

我有一个类似这样的列表(实际上非常大)

我需要与每个供应商分别工作

假设我需要计算每个供应商的平均值并绘制一张图。 此外,假设我需要用供应商的名称(我应该从列表中获取)保存每个mean(txt文件)和每个图形(pdf/jpeg文件)


我对R很陌生,如果你能解释的话,我将非常感激

我相信这个问题肯定有重复的地方。然而,由于这个问题要求为每个聚合级别创建单独的输出文件,我不确定是否容易找到重复

您可以尝试按照以下建议进行操作:

library(data.table)
setDT(DF)[, lapply(.SD, mean), by = name]
如果每个供应商需要单独的txt文件:

setDT(DF)[, fwrite(c(name = name, lapply(.SD, mean)), paste0(name, ".txt")), by = name]
要为每个
名称创建包含单个图形的文件,请执行以下操作:

library(ggplot2)
DF[, {ggplot(.SD) + aes(attr1, attr2) + geom_point() + ggtitle(name);
  ggsave(paste0(name, ".png"))}, by = name]
例如,文件
supplier1.png
将包含:


此解决方案使用的软件包包括
dplyr
purrr
tidyr
ggplot2
(用于绘图目的)


请注意,您可以像访问任何其他数据帧一样访问此数据帧的信息。例如:
df_upd$MEANS
将为您提供所有计算平均数的数据帧列表,
df_upd$MEANS[df_upd$name==“supplier2”]
将为您提供供应商2的先前信息,
df_upd$data[df_upd$name==“supplier3”]
将为您提供供应商3的(原始)属性,等等。

阅读关于
split
lappy
的内容。你确定这是一种列表格式而不是数据框吗?@AntoniosK我想他们不是指“R列表对象”,而是指“数据行”。我有一个Excel文件,我用数据创建了一个列表。这是正确的方法吗?请阅读有关信息和如何给出建议。这将使其他人更容易帮助你。
setDT(DF)[, fwrite(c(name = name, lapply(.SD, mean)), paste0(name, ".txt")), by = name]
library(ggplot2)
DF[, {ggplot(.SD) + aes(attr1, attr2) + geom_point() + ggtitle(name);
  ggsave(paste0(name, ".png"))}, by = name]
# 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>
# 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")))