2016-02-25 2 views
1

Я новичок в R, который борется с некоторыми основными проблемами, связанными с факторами для анализа элементов-плюсов в опросе.Свертывание аналогичных факторов по нескольким столбцам информационного кадра

В частности, есть две проблемы, с которыми я борюсь: во-первых, я не уверен, как изменить похожие имена факторов по столбцам кадра данных, а во-вторых, я ищу эффективный и простой способ коллапс-факторов одновременно в нескольких столбцах кадра данных. Например, если столбцы с 1 по 3 имеют семибалльную шкалу «Крайне неудовлетворенная», «Умеренно недовольна» и т. Д. И т. Д., До «Чрезвычайно удовлетворенного», как я разбиваю категории на «Недовольные» и «Довольные», , одновременно через все три столбца?

Я также надеюсь достичь этого, работая с фреймом данных вместо преобразования в матрицу или другой объект данных. Возможно, мое понимание факторов нуждается в улучшении, но я знаю, что факторы имеют базовое число. Я надеюсь найти метод для достижения результатов при использовании имен факторов и не ссылаясь на цифры. Или я пропустил что-то очевидное о факторах здесь?

Я играл с перекодировкой из пакета автомобилей, но я чувствую, что, вероятно, есть более простой способ. Я также не смог использовать recode для нескольких столбцов, используя функцию apply. Есть ли способ использовать пакеты Plyr или Dplyr для этого типа многоколоночной перекодировки?

Точно так же, как проще всего переименовать аналогичные факторы по столбцам одновременно? Например, переименование «Чрезвычайно удовлетворено» на «Ext. Sat» по столбцам с 1 по 3.

Использовать ли «применить» или «привязать» вместе с функцией?

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

Любые предложения были бы высоко оценены! Это также мой первый пост переполнения стека, поэтому дайте мне знать, как я могу улучшить свой формат вопроса, формулировку и т. Д.

Спасибо! Mike

+0

Добро пожаловать на R и SO. Вот путь с 'replace' http://stackoverflow.com/questions/28637880/renaming-factor-variables-if-a-condition-is-satisfied-in-separate-column и один с' realue' здесь http: //stackoverflow.com/questions/34221338/how-can-we-replace-elements-in-a-vector-in-r. Если вы добавите некоторые данные примера, вы можете получить более подробную справку. –

+0

Было бы намного легче помочь и предложить конкретные рекомендации, если вы предоставили [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) , Легче писать рабочий код, а не просто говорить о коде или общих стратегиях. Переполнение стека для конкретных вопросов и ответов, а не общих обсуждений. – MrFlick

+0

Спасибо за комментарии и советы, они были полезны. – Mike

ответ

0

Вы можете назначить levels из более factor, чтобы сделать группы относительно легко, сохраняя при этом factor структуру. Например .:

df <- data.frame(replicate(3, factor(1:4,levels=1:4, 
       labels=c("extr.dis","dis","sat","extr.sat")))) 
df 

#  X1  X2  X3 
#1 extr.dis extr.dis extr.dis 
#2  dis  dis  dis 
#3  sat  sat  sat 
#4 extr.sat extr.sat extr.sat 

df[] <- lapply(df, function(x) { 
    levels(x)[levels(x) %in% c("extr.dis","dis")] <- "dissat" 
    levels(x)[levels(x) %in% c("sat","extr.sat")] <- "sat" 
    x 
}) 
df 

#  X1  X2  X3 
#1 dissat dissat dissat 
#2 dissat dissat dissat 
#3 sat sat sat 
#4 sat sat sat 
+0

Спасибо, что нашли время, чтобы помочь! – Mike

0

Мы могли бы использовать recode из library(car) (например, данные из @ thelatemail переживайте)

library(car) 
df[] <- lapply(df, recode, 
      'c("extr.dis","dis")="dissat";"extr.sat"="sat"') 


df 
# X1  X2  X3 
#1 dissat dissat dissat 
#2 dissat dissat dissat 
#3 sat sat sat 
#4 sat sat sat 

str(df) 
#'data.frame': 4 obs. of 3 variables: 
# $ X1: Factor w/ 2 levels "dissat","sat": 1 1 2 2 
# $ X2: Factor w/ 2 levels "dissat","sat": 1 1 2 2 
# $ X3: Factor w/ 2 levels "dissat","sat": 1 1 2 2 
+0

Большое спасибо, это сработало и является простым решением! – Mike

+0

Еще один быстрый вопрос.Я изменил имена факторов раньше, используя: levels (df $ Q1) <- c («Новое имя1», «Новое имя2» и т. Д.), Где Q1 является фактором, а «Новые имена» - это новые имена категорий факторов. Я нахожу это быстрым и простым в использовании, но я могу использовать его только для одного столбца. Как применить это к нескольким столбцам с похожими именами факторов? – Mike

+0

Кроме того, есть ли способ достичь вышеуказанных результатов (ваш первоначальный ответ на мой вопрос с перекодом), используя «ifelse» или «if ... else»? Еще раз спасибо! – Mike

Смежные вопросы