在R中列出列表中的数据

时间:2015-12-09 18:29:38

标签: r cbind

我有一堆.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")

1 个答案:

答案 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)