我正在尝试生成包含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函数本身在循环中反应不佳。
答案 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)