Слияние данных из множества файлов и их построение - PullRequest
1 голос
/ 05 сентября 2011

Я написал приложение, которое анализирует данные и записывает результаты в файл CSV.Он содержит три столбца: id , diff и count .
1. id - идентификатор цикла - теоретическичем больше id, тем меньше diff должно быть
2. Diff - это сумма

(Estimator - RealValue)^2
для каждого наблюдения в цикле

3 count - количество наблюдений в течение цикла

. Для 15 различных значений параметра K создается файл CSV с именем:% K% .csv, где% K% - этоИспользуемое значение.Мое общее количество файлов - 15.

Я хотел бы написать простой цикл R, который сможет отображать содержимое моих файлов, чтобы я мог решить, какое значение Kявляется лучшим (для которого вообще diff является самым низким.

Для одного файла я делаю что-то вроде

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

Имеет ли смысл то, что япытаясь это сделать? Обратите внимание, что статистика совсем не является моей областью, равно как и R (но вы, вероятно, уже могли бы это выяснить).

Есть ли какой-нибудь лучший подход, который я могу выбрать? И с теоретической точки зрения,я делаю то, что ожидаю?

Буду очень признателен за любые комментарии, советы, критику и ответы

Ответы [ 2 ]

1 голос
/ 05 сентября 2011

Я не знаком с фоном вашего вопроса, но надеюсь, что смогу понять ваш запрос.

Ваша команда:

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

выполняет xyplot для отношения нормализованной разности ~ цикла.Вы упомянули, что «теоретически, чем больше идентификатор, тем ниже должна быть разница».Так что этот сюжет подтверждает правильность предположения.На самом деле есть еще один способ сделать это с помощью числа: коэффициент корреляции Спирмена, который можно вычислить с помощью cor (x, y, method = 'spearman').

Вы упомянули, что "отображать содержимое моих файлов вчтобы я мог решить, какое значение K является лучшим (для которого вообще разница самая низкая). Поэтому, вероятно, вам нужно загрузить все эти файлы с помощью sth, например «sapply (read.csv (...), упрощение»).= T) ", чтобы загрузить все данные, и после этого вы должны преобразовать все загруженные файлы в какой-то формат с четырьмя столбцами, включая K, Id, diff и count. Затем вы можете визуализировать набор данных в трех измерениях с функциями (levelplot) впакет latticeExtra (извините, я не знаю, как это сделать с помощью ggplot2), или вы можете использовать цветовой код, чтобы сделать это в 2D, используя функцию geom_tile ggplot2, или вы можете использовать фасет для визуализации данныхв сетке.

1 голос
/ 05 сентября 2011

Отредактировано, чтобы убрать некоторые опечатки и решить проблему множественных значений 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), и люди смогут предложить некоторые методы визуализации или анализа, которые могут помочь. 1021 *

...