【发布时间】:2021-03-21 20:32:15
【问题描述】:
我是 R 的新手,我有一个疑问,以防你能提供帮助。
我在一个文件夹中有多个 excel 文件。它们属于不同的子孙,但结构相同。
我想遍历它们,作为数据框加载到 R 中,执行分组并将所有内容保存在单个数据框中并导出为单个文件。这可能吗?
通过查看这里的几个答案,我做到了:
# Load the data as different dataframes
library(tidyverse)
library(readxl)
f <- list.files(pattern="xlsx")
myfiles = lapply(f, read_excel)
for (i in 1:length(f)) assign(f[i], read_excel(f[i], sheet = "Deutsch", skip=7), data.frame(f[i]))
我将它们保存为单个数据框,我不知道如何一起访问它们,所以我手动创建了一个列表:
list_df = list(filialAA.xlsx, filialAB.xlsx,filianAC.xlsx,filianAD.xlsx,filianAE.xlsx...etc)
然后我创建了一个 group by 来执行一些计算:
for (i in 1:length(list_df))
{
list_df[i] %>%
group_by(ABC) %>%
summarise(`Revenue in EUR` = sum(`Revenue in EUR`),
`Weight in KG` = sum(`Weight in KG`),
`Number of Materials` = length(`Materials`),
`Avg of deliveries` = mean(`Deliveries`))
}
如果我对每个数据帧都这样做,它会起作用。但在这个循环中它没有。 你能帮我遍历所有数据帧,执行这个分组并聚集在一个文件中吗?有可能吗?
非常感谢您的关注!
编辑:包含一个虚拟数据样本:
> dput(df1)
structure(list(Materials = c("11575358", "75378378", "21333333",
"02469984", "05465478", "05645648"), Deliveries = c(8, 1, 12,
5, 1, 1), ABC = c("C", "A", "C", "B", "C", "C"), `Revenue in EUR` = c(6179,
1804802.46, 3768.04, 9e+05, 1597.5, 1544.55), `Weight in KG` = c(16.6,
4.695625, 19, 9.14625, 2.74041666666667, 1.44208333333333)), row.names = c(NA,
-6L), class = c("tbl_df", "tbl", "data.frame"))
> dput(df2)
structure(list(Materials = c("48654798", "05465489", "04598496",
"08789453", "01589494", "06459849", "54694985", "65498848"),
Deliveries = c(24, 6, 32, 3, 11, 30, 45, 2), ABC = c("C",
"B", "C", "B", "C", "A", "A", "C"), `Revenue in EUR` = c(5509,
506978, 3978.04, 7e+05, 1597.5, 1200258, 2406975, 4059),
`Weight in KG` = c(29.6, 19, 24, 9.14625, 2.74041666666667,
50, 60, 10)), row.names = c(NA, -8L), class = c("tbl_df",
"tbl", "data.frame"))
原始的 excel 是 xlsx 格式,有 5000 到 15000 行,大约 20 个特征,7 个选项卡。有 22 个 excel 文件需要循环。
【问题讨论】: