在R中构建来自多个CSV的数据框

时间:2014-08-12 22:56:34

标签: r csv dataframe boxplot

(:

我对R不是很了解,但我需要使用它来绘制数据的一组箱形图。

我有一组代表一组2D数据的 .csv 文件。它们包含以下列:

  

i:矩阵的行

     

j:矩阵的列

     

VBoot:矩阵的属性

我的数据是128 x 128,但 .csv 只包含非零属性的索引。

我必须并排绘制每个文件的方框图。

这是我的方法:

library(ggplot2)
library(reshape)

# Set the directory to read the files
setwd("/Users/me/data/CSV/")

operatorProperty <- function(operator, property, degrees, m, n)
{
    p <- list()
    for (degree in degrees)
    {
        file <- paste(c(degree, operator, property, ".csv"), collapse="")
        data <- read.csv(file, header=TRUE, sep=" ", dec=".") 
        # Create an array m * n to fill with the data
        b <- vector(mode="double", length=(m*n))
        # Rebuild the complete data to properly build the box plot
        b[data$i * m + data$j] = sqrt(data$VBoot)
        p <- append(p, list(b))
    }
    p
}

到目前为止,我刚刚创建了一个列表来为每个ensamble插入数据。

然后,我应该建立一个data.frame

min_degree = 0
max_degree = 45
delta = 5
m = 128
n = 128

degrees <- seq(min_degree, max_degree, delta)
property <- "VBoot"
operator <- "Prewitt"
Sobel <- operatorProperty(operator, property, degrees, m, n)

df <- data.frame(degrees, Sobel)
df2<- melt(data=df,id.vars="degrees")

p <- ggplot(df2, aes(x=degrees,y=value,colour=variable)) +
    geom_boxplot() +
    theme(legend.title=element_blank()) +
    xlab(expression(theta)) +
    ylab("Bootstrap Variance")

但是,我无法构建data.frame。我不知道该怎么办。可以找到数据的示例here

提前谢谢。

1 个答案:

答案 0 :(得分:0)

确定。好吧,我不得不改变一些事情来使用这个样本数据。这是设置

m = 128
n = 128

operatorProperty <- function(operator, property, degrees, m, n)
{
    Map(function(degree) {
        file <- paste(c(degree, operator, property, ".csv"), collapse="")
        data <- read.table(file, header=TRUE, dec=".") 
        # Create an array m * n to fill with the data
        b <- vector(mode="double", length=(m*n))
        # Rebuild the complete data to properly build the box plot
        b[data$i * m + data$j] = sqrt(data[[property]])
        b
    }, degrees)
}


degrees <- c('00','05')
property <- "MSE"
operator <- "Prewitt"
Sobel <- operatorProperty(operator, property, degrees, m, n)

使用此修改后的表单,Sobel是一个列表,其中包含与不同度数对应的命名元素。我们可以将其转换为data.frame并使用

绘图
df2<- melt(data.frame(Sobel, check.names=F))

p <- ggplot(df2, aes(x=variable,y=value,colour=variable)) +
    geom_boxplot() +
    theme(legend.title=element_blank()) +
    xlab(expression(theta)) +
    ylab("Bootstrap Variance")

enter image description here

看起来非常有趣,因为你有这么多的零。所有非零条目都标记为异常值。

但即使我们没有很好地命名Sobel列表,它基本上是一个包含两个向量的列表(每个度数一次)

list(c(0,0,0,0, ...), c(0,0,0,0,...))

如果您想将其与度数合并并转换为data.frame,则另一种选择可能是

do.call(rbind, Map(cbind.data.frame, degrees, Sobel))