R表一个变量与其他所有变量

时间:2018-07-03 10:19:48

标签: r

我正在尝试生成包含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”,没有默认值 消息,但我不知道错误在哪里(我认为是一些简单的语法错误)。

您能否告诉我这些解决方案是否对我的问题有好处,我在哪里做错了? 谢谢

编辑

我尝试使用添加的功能(在打印行之后)生成表:

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

我没有收到任何错误消息,但没有任何反应。这似乎可以在函数外部很好地工作,所以我认为是paste0中的var_name需要一些东西,或者assign函数本身在循环中反应不佳。

1 个答案:

答案 0 :(得分:0)

我写了一个可以做到的函数。参数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)