使用R中的prop.table循环遍历变量

时间:2018-01-03 20:36:41

标签: r loops for-loop

我有一个简单的问题。我试图循环一组变量来生成prop.tables。我只是试图直观地检查结果。

这是mtcars数据集中无意义的例子。

-like '*19?9*'

输出为以下6项:

#define loop variables
test <- mtcars
target_var <- c("mpg", "wt")   # targets
group_var <- c("gear", "carb")   # groups to loop through

#loop through combinations of targets and groups, running prop.table
for (i in target_var) {
  for (j in group_var) {

    print(prop.table(table(test$i, test$j), 2))
  }
}

我知道我错过了一些基本的东西。

3 个答案:

答案 0 :(得分:1)

test$i无法工作。 i数据框中没有列mtcars - 运算符$无法解析变量名称。您可能需要test[i, ]test[, i]

另请注意,没有名为"3""4"的列或行,因此对group_var的迭代不会产生任何意义。

答案 1 :(得分:1)

正如Maciej所提到的,你不能指望import wx.adv被评估,以便test$i被你要提取的列替换。但是,我们可以使用函数iparse_expr来控制要评估的内容以及何时进行评估。对代码进行细微更改可以使其工作:

eval

答案 2 :(得分:1)

我发现您对循环解决方案很感兴趣,但我会发布tidyverse方法,您可以map将函数test <- mtcars target_var <- c("mpg", "wt") group_var <- c("gear", "carb") library(tidyverse) # get combinations of variables in a dataset df1 = expand.grid(target_var, group_var, stringsAsFactors = F) # apply the function (prop.table etc.) to those combinations map2(df1$Var1, df1$Var2, ~prop.table(table(test[, .x], test[, .y]), 2)) 添加到变量的每个组合中,而不是循环。< / p>

[[1,'https://hooks.com/catch/123'],[2,'https://hooks.com/catch/123'],[3,'https://hooks.com/catch/123']]

这将为您提供一个包含所需表格的列表。