R таблица одна переменная против всех других из дБ - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь сгенерировать таблицы из 1 переменной против всех других моих переменных, имена которых сделаны из переменных.

Мой ожидаемый результат будет таким же количеством таблиц, как и число переменных, как если бы я запрашивал таблицы для каждой пары переменных, с именами как bro2v Other_var_name

bro2vagecat

                  11   13   15
  Less frequent 2018 1827 1630
  Twice a day   4276 4782 4194

bro2vsex

                 Boy Girl
  Less frequent 3342 2133
  Twice a day   6010 7242


bro2vwealth

                 Low  Mid High
  Less frequent  494 1605 3191
  Twice a day    843 3350 8588

bro2vQOL

                 Low  Mid High
  Less frequent 1947 2576  837
  Twice a day   4689 6363 1918

etc...

Я уже подмножество моей базы данных (dbmv), чтобы хранить только те переменные, которые мне нужны, и все они являются факторами.

Я попробовал 2 варианта, но оба получили ошибки:

  for(i in dbmv) {
  assign(paste("bro2v", i, sep="") ,table(dbmv$bro2,i))
  }

работает почти нормально, но циклически проходя через dbmv фактически циклически изменяя значения моих факторов, а не сами векторы, генерируя какие-то странные таблицы.

Эти имена понятны:

bro2v11
               i
                11 ans 13 ans 15 ans
  Less frequent   2018   1827   1630
  Twice a day     4276   4782   4194

bro2vBoy
               i
                 Boy Girl
  Less frequent 3342 2133
  Twice a day   6010 7242

Но это не так просто угадать, поскольку многие из моих векторов имеют значения с именем Low / Mid / High, поэтому я предполагаю, что последний переопределяет другой:

> bro2vLow
               i
                 Low  Mid High
  Less frequent 1947 2576  837
  Twice a day   4689 6363 1918

> bro2vMid
               i
                 Low  Mid High
  Less frequent  494 1605 3191
  Twice a day    843 3350 8588

А некоторые таблицы совершенно невозможно угадать (хороший пример - bro2vNA)

Я попробовал некоторые изменения, такие как использование nrow (dbmv) и т. Д. ... но я не могу найти способ указать на имена факторов.

Моя вторая попытка использовала apply:

apply(dbmv, margin=2, function(x) 
  {
  assign(paste("bro2v", x, sep="") ,table(dbmv$bro2,x))
  })

где я получил Ошибка в match.fun (FUN): отсутствует аргумент "FUN", без значения по умолчанию сообщение, и я не понимаю, где находится ошибка (я предполагаю, что какая-то простая синтаксическая ошибка).

Не могли бы вы сказать мне, если эти решения хороши для моей проблемы и где я ошибся? Thx

EDIT

Я попытался сгенерировать таблицы, используя предоставленную функцию, в которую я добавил (после строки печати):

assign(paste0("bro2v", var_name), table(data[[var]], data[[var_name]]))

Я не получаю никакого сообщения об ошибке, но ничего не происходит. Кажется, что это хорошо работает вне функции, поэтому я предполагаю, что что-то нуждается в var_name в paste0, или сама функция assign, которая плохо реагирует в цикле.

1 Ответ

0 голосов
/ 03 июля 2018

Я написал вам функцию, которая может это сделать. Параметр var - это переменная, для которой вы хотите получить таблицы со всеми другими переменными. данные - это data.frame.

get_tables = function(var, data){
  var_names = colnames(data)
  var_names = var_names[-which(var_names == var)]
  result = list()
  for(var_name in var_names){
    cat(paste0("bro2v", var_name))
    print(table(data[[var]], data[[var_name]]))
    result[[paste0("bro2v", var_name)]] =  table(data[[var]], data[[var_name]])
  }
  result
}
tables = get_tables("A", data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...