我有一堆.csv文件,我想读入列表,然后创建图。 我已经尝试了下面的代码,但在尝试cbind时遇到错误。以下是2个示例文件的输入。每个文件代表来自单独站的天气数据。理想情况下,我会将每个文件中的prcp数据(列)绘制到一个绘图窗口中。我没有太多处理列表中数据的经验。
file1 <- structure(list(mxtmp = c(18.974, 20.767, 21.326, 19.669, 18.609,
21.322), mntmp = c(4.026, 5.935, 8.671, 6.785, 3.493, 6.647),
prcp = c(0.009, 0.046, 0.193, 0.345, 0.113, 0.187)), .Names = c("mxtmp",
"mntmp", "prcp"), row.names = c(NA, 6L), class = "data.frame")
file2 <- structure(list(mxtmp = c(18.974, 20.767, 21.326, 19.669, 18.609,
21.322), mntmp = c(4.026, 5.935, 8.671, 6.785, 3.493, 6.647),
prcp = c(0.009, 0.046, 0.193, 0.345, 0.113, 0.187)), .Names = c("mxtmp",
"mntmp", "prcp"), row.names = c(NA, 6L), class = "data.frame")
我将这些文件从目录读入列表:
myFiles <- list.files(full.names = F, pattern = ".csv")
my.data <- lapply(myFiles, read_csv)
my.data
names(my.data) <- gsub("\\.csv", " ", myFiles)
我在下面的行中收到错误:
my.data <- lapply(my.data, function(x) cbind(x = seq_along(x), y = x))
data.frame(...,check.names = FALSE)出错: 参数意味着不同的行数:3,34333
list.names <- names(my.data)
lns <- sapply(my.data, nrow)
my.data <- as.data.frame(do.call("cbind", my.data))
my.data$group <- rep(list.names, lns)
我的情节代码:
library(ggplot2)
ggplot(my.data, aes(x = x, y = y, colour = group)) +
theme_bw() +
geom_line(linetype = "dotted")
答案 0 :(得分:2)
如果您不需要保留其他任何数据框,那么您可以一次阅读并绘制所有数据框。绘图代码中的列名称与数据框中的列名称不匹配。因此,这是一种通用方法,您需要根据实际数据进行定制。下面的代码读取每个数据框并从中创建一个图,然后返回一个包含图的列表:
plot.list = lapply(myFiles, function(file) {
df = read_csv(file)
ggplot(df, aes(x = x, y = y, colour = group)) +
theme_bw() +
geom_line(linetype = "dotted")
})
# Lay out all the plots together
library(gridExtra)
do.call(grid.arrange, plot.list)