r语言 - dplyr:与管道的交叉表



关于dplyr有两个问题,在我的情况下,我试图解决的问题有关:

  1. 在尝试将一系列操作的结果传递给xtabs时,如何使用管道对data_frame进行分类?
  2. 管道的论点通常用dplyr中的.表示。magrittr,但这也是用于表示公式接口中其他所有内容的令牌。我知道在dplyr某个地方有一个空旷的问题(现在无法找到它),该问题谈论用.替换CC_7。

这是一个示例:

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不替换公式中的周期("。")。在小插图中简要描述了该行为(搜索"公式")。

相关内容

  • 没有找到相关文章

最新更新