как выбрать матричный элемент в R? - PullRequest
0 голосов
/ 16 октября 2010

Считывание данных следующим образом

data<-read.csv("userStats.csv", sep=",", header=F)

Я пытался выбрать элемент в определенной позиции.

Пример данных (первые пять строк) следующий (V2 - дата, а V3 - день недели):

   V1               V2
1 00002781A2ADA816CDB0D138146BD63323CCDAB2                 2010-09-04
2 00002D2354C7080C0868CB0E18C46157CA9F0FD4                 2010-09-04
3 00002D2354C7080C0868CB0E18C46157CA9F0FD4                 2010-09-07
4 00002D2354C7080C0868CB0E18C46157CA9F0FD4                 2010-09-08
5 00002D2354C7080C0868CB0E18C46157CA9F0FD4                 2010-09-17
                              V3 V4 V5          V6 V7 V8          V9
1 Saturday                        2  2         615  1  1          47
2 Saturday                        2  2          77  1  1          43
3 Tuesday                         1  3         201  1  1         117
4 Wednesday                       1  1          44  1  1          74
5 Friday                          1  1           3  1  1          18

Я попытался разделить 6-й столбец с 9-м столбцом в первой строке следующим образом:

data[1,6]/data[1,9]

но он вернул ошибку

[1] NA
Warning message:
In Ops.factor(data[1, 6], data[1, 9]) : / not meaningful for factors

Затем я попытался выбрать только один элемент

> data[2,9]
[1]          43
11685 Levels:            0           1           2           3 ...       55311

но не знаю, что это за уровни и что вызывает ошибку. Кто-нибудь знает, как выбрать элемент в данных конкретной позиции [строка, столбец]?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 16 октября 2010

Мой любимый инструмент для проверки класса переменных - str().

Имеется фрейм данных, и по крайней мере один из столбцов, с которыми вы пытаетесь работать, является фактором. См. Ответ Дирка о том, как изменить классы столбца.

Команда

data[1,6]/data[1,9]

выбирает значение в первой строке шестого столбца и делится на значение в первой строке девятого столбца. Это то, что вы хотите? Если вы хотите использовать значения из всего столбца (а не только из первой строки), вы должны написать

data[6] / data[9]

или

data[, 6] / data[, 9]

Оба аргумента эквивалентны для data.frames.

3 голосов
/ 16 октября 2010

Стандартная структура данных моделирования в R представляет собой data.frame.

Объекты data.frame могут содержать различные типы: numeric, character, factor, ...

Теперь, когда вы читаете данные с помощью read.csv() и др., Вы можете быть укушенным значением по умолчанию опции stringsAsFactors. Я предполагаю, что как минимум в строке в ваших данных содержался текст, поэтому R решает декодировать его как фактор, и presto! вы больше не можете выполнять прямые математические операции над столбцом. 1018 *

Короче, сделайте summary(data) и / или разверните class() по всем столбцам. При необходимости преобразуйте или установите для переменной stringsAsFactors другое значение или оба значения.

Как только ваши данные числовые, вы можете делить, нарезать, нарезать кубиками, ... как вам угодно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...