#r #statistics
#r #Статистика
Вопрос:
У меня есть набор данных опроса с 40 упорядоченными факторными переменными. Переменные преобразуются в символы при импорте данных.Пожалуйста, поправьте меня, если я ошибаюсь, так как я подумываю об использовании apply function
здесь.
Ниже приведены мои манипуляции с данными:
### data v1 lt;- as.character(c(1,4,2,4,3,1,3,4,5,2,2,3,6,5,4,6,5,4,5,6,6,2,4,3,4,5,6,1,6,3,5,6,3,2,4,5,3,2,4,5,3,2,4)) v2 lt;- as.character(c(3,4,1,4,5,1,3,1,5,6,4,3,4,5,6,3,3,5,4,3,3,5,6,3,4,3,4,6,3,1,1,3,4,5,6,1,3,6,4,3,1,6,5)) df lt;- data.frame(v1,v2) ### transform into ordered factor df$v1.f lt;- as.factor(df$v1) df$v1.f lt;- ordered(df$v1.f, levels = c("1", "2", "3", "4", "5", "6"))
Реальные уровни-это несортированные символы, поэтому я включил этот шаг. Я не против ввести это для всех переменных, но это кажется излишним.
Моя вторая проблема связана с выводом. Я хотел бы создать необычный отчет и знать, как генерировать для него цифры:
v1.freq lt;- table(df$v1.f) v1.perc lt;- round(prop.table(v1.freq),2)*100 v1.med lt;- median(df$v1)
Как может быть напечатана таблица , содержащая всю информацию для всех переменных сразу для нескольких переменных, особенно если нет ответов на уровень (см. v2
, Где нет ответа для level 2
; table()
просто пропускает уровень).
Как включить вывод R в таблицу, в которой уровни являются заголовками, а частоты и проценты-строками для нескольких переменных?
Копирование/вставка чисел в лист Excel снова кажется ненужным и подверженным ошибкам.
Ответ №1:
Во-первых, вы можете проверить, есть ли у вас stringAsFactor
опция для функции импорта данных.
Затем, как я понимаю, вы хотите преобразовать свою переменную в упорядоченные факторы, и это для всех них. Вы можете обернуть это в dplyr
предложение и использовать forcats
для обработки факторов. Давайте возьмем ваши данные:
library(tidyverse) df %gt;% mutate(across(1:2, ~factor(.))) %gt;% mutate(across(1:2,~ordered(.))) %gt;% str()
Выход:
'data.frame': 43 obs. of 2 variables: $ v1: Ord.factor w/ 6 levels "1"lt;"2"lt;"3"lt;"4"lt;..: 1 4 2 4 3 1 3 4 5 2 ... $ v2: Ord.factor w/ 5 levels "1"lt;"3"lt;"4"lt;"5"lt;..: 2 3 1 3 4 1 2 1 4 5 ...
Как вы можете видеть, переменные преобразуются в виде упорядоченных факторов с уровнями, упорядоченными в алфавитном порядке. Чтобы объяснить, mutate
нужно изменить ваши переменные, across
указать, какие переменные вы хотите изменить и как. Здесь мы хотим изменить переменную 1
2
и применить к ним функции factor
, а затем ordered
. Если выравнивание по алфавиту не является желательным, вы все равно можете изменить столбец самостоятельно и привести levels
аргумент.
Для второго вопроса, поскольку для V2 нет уровня «2», в отличие от V1, вы не можете объединить две переменные, если только вы не добавите уровень для V2 с NA. Вы все еще можете проверить janitor::tabyl
, чтобы задать перекрестные частоты, и создать одну таблицу для каждой переменной:
library(janitor) df2 lt;- df %gt;% mutate(across(1:2, ~factor(.))) %gt;% mutate(across(1:2,~ordered(.))) map(df2, tabyl)
Выход:
$v1 .x[[i]] n percent 1 3 0.06976744 2 7 0.16279070 3 8 0.18604651 4 10 0.23255814 5 8 0.18604651 6 7 0.16279070 $v2 .x[[i]] n percent 1 7 0.1627907 3 13 0.3023256 4 9 0.2093023 5 7 0.1627907 6 7 0.1627907
Комментарии:
1. Спасибо! Это сработало идеально.