Dataframe, Sum, Mean Справка: как суммировать и усреднять матрицу?

Мне нужно объяснение команд фрейма данных, суммы и среднего. Если использовать приведенный ниже код, я могу получить список файлов данных Preplist. Тем не менее, команды, для которых мне нужны пояснения, не работают из-за некоторых ошибок.

Я предполагаю, что данные, которые я загружаю, не имеют фрейма данных, а просто список чисел для каждого файла данных. Чтобы суммировать или взять среднее значение для каждого файла данных, мне нужен фрейм данных. (Когда я проверяю количество строк, нет ничего, кроме NULL).

Я думаю, мне нужно создать фрейм данных для загруженных данных (матрица 200x200), а также первая строка и столбец должны игнорироваться в исходных данных.

Это мой код:

Prepfiles <- list.files(pattern=".csv")
Preplist <- lapply(Prepfiles, read.table, sep = '\t', 
                  na.string = '', header = TRUE, skip=1)
bigPreplist <- do.call(rbind, Preplist)

Мне нужно сразу загрузить данные и построить данные (суммировать все три файла данных вместе и построить график). Однако у меня проблемы с запуском команд sum() и mean() с моим Preplist[1:24]

Я использую все числовые в матрице 200 на 200. Есть 24 файла данных. Также я хочу, чтобы при загрузке данных сохранялась матричная форма 200 на 200, но с моим кодированием количество строк отсутствует, если я проверяю с помощью nrow(Preplist[1]). Можно ли сохранить тот же фрейм данных при загрузке данных? Или мне нужно создать новый фрейм данных?

Вот ошибки, которые я получаю с командами sum и mean:

> nrow(Preplist)
NULL
> sum(Preplist[1])
Error in sum(Preplist[1]) : invalid 'type' (list) of argument
> mean(Preplist[1])
[1] NA
Warning message:
In mean.default(Preplist[1]) :
  argument is not numeric or logical: returning NA

person Community    schedule 26.02.2013    source источник
comment
Вы пробовали использовать подмножество [[ вместо [?   -  person sebastian-c    schedule 27.02.2013
comment
Что вы ожидаете от Preplist[1]? Столбец данных? Фрейм данных 200x200?   -  person joran    schedule 27.02.2013
comment
Если я могу данные в виде матрицы 200 на 200, это будет проще, но это можно будет перечислить. Мне нужно загрузить числа из файлов данных и взять сумму, среднее значение и график.   -  person    schedule 27.02.2013


Ответы (1)


Здесь полезно посмотреть справку для [ и [[ (которые являются одной и той же страницей)

Процитировать соответствующий раздел (поскольку prepList - это список)

Рекурсивные (списковые) объекты

Индексирование с помощью [аналогично атомарным векторам и выбирает список указанных элементов.

Оба [[и $ выбирают один элемент списка. Основное отличие состоит в том, что $ не позволяет вычислять индексы, тогда как [[делает. x $ name эквивалентно x [[имя, точное = FALSE]]. Кроме того, частичное сопоставление [[можно контролировать с помощью точного аргумента.

So,

prepList[1]

выбирает список длиной 1. Первым элементом этого списка будет ваш data.frame

preplist[[1]] 

выберет первый элемент prepList, который является нужным вам data.frame.

При этом я не уверен, что вы действительно хотите брать среднее значение или сумму data.frame, вы бы хотели убедиться, что они вернули то, что вы хотели.

eg

prepList <- list(data.frame(a=1:5,b=2:6), data.frame(a=2:6,b=1:5))

# this will give a warning
mean(prepList[[1]])

## a b 
## 3 4 
## Warning message:
## mean(<data.frame>) is deprecated.
## Use colMeans() or sapply(*, mean) instead. 


## this will give a single number

sum(prepList[[1]])

## 35

Если вы хотите, чтобы средние значения столбца для каждого data.frame, который находится в prepList, или суммы каждого столбца, используйте colMeans, colSums или вложенную версию lapply со средствами,

eg 
library(data.table)
rbindlist(lapply(prepList, function(x) lapply(x, mean)))

##    a b
## 1: 3 4
## 2: 4 3

или используя plyr и ldply

library(plyr)
 ldply(prepList, function(x) {sapply(x, mean)})

или ограничиться числовыми столбцами

используя plyr

ldply(prepList,  numcolwise(mean))

используя фильтр

rbindlist(lapply(prepList, function(x) lapply(Filter(is.numeric,x), mean)))
person mnel    schedule 26.02.2013
comment
Я получаю кучу цифр с ошибками. ›Sum (Preplist [[1]]) Ошибка в FUN (X [[1L]], ...): определено только во фрейме данных со всеми числовыми переменными› mean (Preplist [[1]]] »X1.3.79. 3.79.2.33.… .3.87.4.01.4.01 NA Предупреждающие сообщения: 1: среднее (‹data.frame›) устарело. Вместо этого используйте colMeans () или sapply (*, mean). 2: В mean.default (X [[1L]], ...): аргумент не является числовым или логическим: возвращается NA - person ; 27.02.2013
comment
@Uka, это сообщение говорит само за себя. У вас есть нечисловые столбцы (не ясно из вашего вопроса), однако я отредактирую свой ответ, чтобы отфильтровать их. - person mnel; 27.02.2013
comment
@Uka, skip - это аргумент для read.table, указывающий, сколько строк нужно пропустить (если есть). Это не аргумент в пользу mean или sum. Я думаю, что, возможно, вам следует прочитать базовое введение в R (см. Здесь вики-страницу для идей) и, возможно, прочитать файлы справки по функциям, которые вы пытаетесь использовать. - person mnel; 27.02.2013