代码之家  ›  专栏  ›  技术社区  ›  I82Much

R—处理数据帧列表的惯用方法

  •  3
  • I82Much  · 技术社区  · 15 年前

    我有30次数据运行,每次都存储在一个单独的CSV文件runi.CSV中,I=0:29。

    runs = list()
    for (i in 1:30) { runs[[i]] = read.csv(paste("run", i-1, ".csv")); }
    

    现在让我们进一步说,列表中存储的每个数据帧都有相同的列布局,我对由“x”标识的列和由“y”标识的列感兴趣。

    必须 更好的方法是:

    xList = list()
    yList = list()
    for (i in 1:30) { xList[[i]] = runs[[i]]$x; yList[[i]] = runs[[i]]$y; }
    matplot(x=as.data.frame(xList), y=as.data.frame(yList))
    

    当我试图对数据进行转换时,这会变得更加痛苦;我不知道如何将函数应用于列表中存储的每个数据帧的特定列。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Shane    15 年前

    在处理这样的列表时,最好使用l*ply函数(来自plyr)或LAPPY。

    进行导入的最简单方法可能如下所示:

    library(plyr)
    runs <- llply(paste("run",1:30,".csv",sep=""), read.csv)
    

    这里有一种绘制它们的方法:

    # some dummy data
    runs <- list(a=data.frame(x=1:5, y=rnorm(5)), b=data.frame(x=1:5, y=rnorm(5)))
    par(mfrow=c((length(runs)/2),2));
    l_ply(1:length(runs), function(i) { plot(runs[[i]]$x, runs[[i]]$y) })
    

    当然,您也可以将其输出到其他设备(例如pdf)而不使用 par() .

        2
  •  5
  •   Aniko    15 年前

    包含所有数据的数据帧。例如,在导入时添加运行编号( runs[[i]] = data.frame(read.csv(paste("run", i-1, ".csv")), Run=i) ),然后做 alldata <- do.call(rbind, runs) .

    lattice ggplot2

    library(ggplot2)
    qplot(x, y, colour=Run, data=alldata, geom="point")