r - dplyr:带管道的交叉表

标签 r dplyr magrittr

关于 dplyr 有两个问题,就我而言,这与我试图解决的问题有关:

  • 如何对 data_frame 进行交叉分类使用管道,当尝试将一系列操作的结果传递给 xtabs 时?
  • 管道的参数通常用 . 表示在 dplyr & magrittr ,但这也是用于表示公式界面中其他所有内容的标记。我知道 dplyr 上有一个 Unresolved 问题某处(现在无法找到它)谈论更换 ._ .

  • 下面是一个例子:
    wakefield::r_data_frame(
      n = 100,
      cat1 = r_sample_factor(x = LETTERS[1:3]),
      cat2 = r_sample_factor(x = LETTERS[1:3]),
      cat3 = r_sample_factor(x = LETTERS[1:3]),
      bin1 = r_sample_logical()
    ) %>%
      dplyr::filter(bin1) %>%
      xtabs(. ~ cat1 + cat2 + cat3, data = .)
    

    输出失败:
    Error in model.frame.default(formula = . ~ cat1 + cat2 + cat3, data = .) : 
      invalid type (list) for variable '.' 
    

    因为 magrittr正在替换第一个 .结果 data_frame之前的计算。一种方法是完全省略第一个句点,如下所示:
    wakefield::r_data_frame(
      n = 100,
      cat1 = r_sample_factor(x = LETTERS[1:3]),
      cat2 = r_sample_factor(x = LETTERS[1:3]),
      cat3 = r_sample_factor(x = LETTERS[1:3]),
      bin1 = r_sample_logical()
    ) %>%
      dplyr::filter(bin1) %>%
      xtabs( ~ cat1 + cat2 + cat3, data = .)
    

    但是如果 .需要去formula的另一边?

    编辑:

    正如@MrFlick 所指出的,xtabs不拿 RHS .反正。我认为这个问题也可以用 RHS . 来举例说明。我期望使用代码的冲突:
    wakefield::r_data_frame(
      n = 100,
      cat1 = r_sample_factor(x = LETTERS[1:3]),
      cat2 = r_sample_factor(x = LETTERS[1:3]),
      cat3 = r_sample_factor(x = LETTERS[1:3]),
      bin1 = r_sample_logical()
    ) %>%
      dplyr::filter(bin1) %>%
      dplyr::select(-bin1) %>%
      xtabs( ~ ., data = .)
    

    但这确实按预期工作。有人可以解释为什么magrittr没有尝试替换第一个 .data_frame ?

    最佳答案

    magrittr不替换公式中的句点 (".")。在 vignette 中简要描述了该行为。 (搜索“公式”)。

    关于r - dplyr:带管道的交叉表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30106206/

    相关文章:

    r - 包名称 = 主函数名称时的文档

    r - 使用 dplyr tidyr 在汇总表中保留输入变量和因子水平的顺序

    r - dplyr summarise() 具有来自单个函数的多个返回值

    r - 仅通过 R 中递增、升序来过滤组

    r - dplyr + magrittr + qplot = 没有情节?

    r - 如何使用 dplyr 按组有条件地更改列中的值?

    r - 带有缺失值的 dplyr 交叉表

    r - (日期)内的总和

    r - 在 ggplot 中使用参数占位符

    r - 将函数参数传递给 dplyr select