Основы R: работа с несколькими переменными одновременно и их вывод

#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. Спасибо! Это сработало идеально.