Установить порядок уровней факторов для нескольких столбцов во фрейме данных - PullRequest
4 голосов
/ 02 февраля 2011

Я загрузил данные из файла CSV во фрейм данных. Каждый столбец представляет вопрос опроса, и все ответы представлены по пятибалльной шкале Лайкерта с метками: («Нет», «Низкий», «Средний», «Высокий», «Очень высокий»). *

Когда я сначала читаю данные, R правильно интерпретирует эти значения как факторы, но не знает, каким должен быть порядок. Я хочу указать порядок значений, чтобы я мог сделать некоторые численные расчеты. Я думал, что следующий код будет работать:

X <- read.csv('..')
likerts <- data.frame(apply(X, 2, function(X){factor(X, 
             levels = c("None", "Low", "Medium", "High", "Very High"), 
             ordered = T)}))

Вместо этого все данные уровня преобразуются в строки. Как мне сделать это правильно?

Ответы [ 2 ]

8 голосов
/ 02 февраля 2011

При использовании data.frame, R снова преобразуется в нормальный коэффициент (или если stringsAsFactors = FALSE в строку). Вместо этого используйте as.data.frame. Тривиальный пример с игрушечным фреймом данных:

X <- data.frame(
  var1=rep(letters[1:5],3),
  var2=rep(letters[1:5],each=3)

)
likerts <- as.data.frame(lapply(X, function(X){ordered(X,
              levels = letters[5:1],labels=letters[5:1])}))

> str(likerts)
'data.frame':   15 obs. of  2 variables:
 $ var1: Ord.factor w/ 5 levels "e"<"d"<"c"<"b"<..: 5 4 3 2 1 5 4 3 2 1 ...
 $ var2: Ord.factor w/ 5 levels "e"<"d"<"c"<"b"<..: 5 5 5 4 4 4 3 3 3 2 ...

Для обозначения ordered() дает упорядоченный коэффициент, а lapply(X,...) является более оптимальным, чем apply(X,2,...) в случае кадров данных.

4 голосов
/ 02 февраля 2011

И обязательное решение plyr (используя приведенный выше пример Джориса):

> require(plyr)
> Y <- catcolwise( function(v) ordered(v, levels = letters[5:1]))(X)

> str(Y)
'data.frame':   15 obs. of  2 variables:
 $ var1: Ord.factor w/ 5 levels "e"<"d"<"c"<"b"<..: 5 4 3 2 1 5 4 3 2 1 ...
 $ var2: Ord.factor w/ 5 levels "e"<"d"<"c"<"b"<..: 5 5 5 4 4 4 3 3 3 2 ...

Обратите внимание, что одна хорошая вещь в catcolwise заключается в том, что она будет применяться только к столбцам X, которые являютсяоставляя остальных в покое.Чтобы объяснить, что происходит: catcolwise - это функция, которая принимает функцию в качестве аргумента и возвращает функцию, которая работает "по столбцам" над столбцами факторов в фрейме данных.Таким образом, мы можем представить вышеприведенную строку в два этапа: fn <- catcolwise(...); Y <- fn(X).Обратите внимание, что есть также функции colwise (работает для всех столбцов) и numcolwise (работают только для числовых столбцов).

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