合并来自许多文件的数据并绘制它们

时间:2011-09-05 17:58:53

标签: r optimization csv estimation

我编写的应用程序正在分析数据并将结果写入CSV文件。它包含三列: id diff count
 1. id 是循环的id - 理论上,较大的id,较低的 diff 应为
 2. Diff

(Estimator - RealValue)^2
,用于周期中的每个观察

3 计数是周期中的观察次数

对于参数K的15个不同值,我生成名称为%K%.csv的CSV文件,其中%K%是使用的值。我的文件总数是15。

我想做的是,用R简单循环编写,这将能够绘制我文件的内容以便让我决定,哪个K值最好(一般来说 diff 是最低的。

对于单个文件,我正在执行类似

的操作
 ggplot(data = data) + geom_point(aes(x= id, y=sqrt(diff/count)))

我想要做的是否有意义?请注意,统计数据完全不是我的域名,R也不是(但您可能已经明白了)。

我可以选择更好的方法吗?从理论的角度来看,我正在做我期待的事情吗?

我对任何评论,提示,评论和答案都非常有帮助

2 个答案:

答案 0 :(得分:1)

编辑清理一些拼写错误并解决多K值问题。

我将假设您已将所有.csv文件放在一个目录中(此目录中没有其他内容)。我还假设每个.csv确实具有相同的结构(相同的列数,以相同的顺序)。我首先要生成一个文件名列表:

myCSVs <- list.files("path/to/directory")

然后我会使用lapply“循环”文件名列表,使用read.csv将每个文件读入数据框:

setwd("path/to/directory")
#This function just reads in the file and
# appends a column with the K val taken from the file
# name. You may need to tinker with the particulars here.
myFun <- function(fn){
     tmp <- read.csv(fn)
     tmp$K <- strsplit(fn,".",fixed = TRUE)[[1]][1]
     tmp
}
dataList <- lapply(myCSVs, FUN = myFun,...)

根据.csv的结构,您可能需要将一些其他参数传递给read.csv。最后,我将这个数据帧列表组合成一个数据帧:

myData <- do.call(rbind, dataList)

然后,您应该将所有数据放在一个数据框myData中,然后传递给ggplot

至于你问题的统计方面,如果没有具体的数据示例,提供意见有点困难。一旦你想出编程部分,你可以问一个单独的问题,提供一些样本数据(在这里,或在stats.stackexchange.com上),人们将能够提出一些可能有用的可视化或分析技术。 / p>

答案 1 :(得分:1)

我不熟悉你问题的背景,但我希望我能理解你的要求。

你的命令:

ggplot(data = data)+ geom_point(aes(x = id,y = sqrt(diff / count)))

正在为xyplot进行归一化差异〜循环的关系。你提到“在理论上,更大的id,更低的差异应该是”。所以这个图正在验证这个假设。实际上还有另一种方法可以用一个数字来实现:spearman相关系数,可以用cor(x,y,method ='spearman')计算。

你提到“我的文件的内容是为了让我决定,K的哪个值是最好的(一般来说差异是最低的”。所以你可能需要加载所有这些文件,如同“sapply(read.csv(...),simplify = T)”加载所有数据,之后你应该将所有加载的文件转换成某种格式,其中四列包括K,Id,diff和count。然后你可以使用latticeExtra包中的函数(levelplot)在三维中可视化数据集(抱歉,我不知道如何使用ggplot2执行此操作),或者您可以使用颜色编码方式在2-d中使用geom_tile函数执行此操作ggplot2,或者,您可以使用facet以网格方式显示数据。