使用不同类别的`tidyverse`的R函数`tally()`的正确方法是什么?

时间:2017-09-22 19:12:11

标签: r dplyr tidyverse

我刚读过本杰明的教科书,现代数据科学与R 。在页面180,我发现有用函数tally()类似于table()或某些交叉函数。但我不能在我的r中重现这个功能。

作者使用此函数tally(income_dtree ~ income, data = train, format = "count")

我模拟了一个例子,但失败了。

library(dplyr)
data_frame(
  x = rnorm(100),
  y = c(rep("A",50),rep("B",50))
) %>%
  tally(~y)

警告讯息为Error in summarise_impl(.data, dots) : Evaluation error: invalid 'type' (language) of argument.

有谁知道如何使用它?

@ycw的Thx。答案就在这里。

library(tidyverse)
library(mosaic)
data_frame(
  x = rnorm(100),
  y = c(rep("A",50),rep("B",50)),
  z = c(rep("C",70),rep("D",30)),
) %>%
  tally(~ y + z, data = .)

   z
y    C  D
  A 50  0
  B 20 30

用户必须在data = .中添加tally(),即使他们使用管道。

1 个答案:

答案 0 :(得分:2)

这可能是你想要的:

library(dplyr)

data_frame(
  x = rnorm(100),
  y = c(rep("A",50),rep("B",50))) %>%
  group_by(y) %>%
  tally()

# A tibble: 2 x 2
      y     n
  <chr> <int>
1     A    50
2     B    50

与以下内容相同

data_frame(
  x = rnorm(100),
  y = c(rep("A",50),rep("B",50))) %>%
  count(y)

# A tibble: 2 x 2
      y     n
  <chr> <int>
1     A    50
2     B    50

或者这个

data_frame(
  x = rnorm(100),
  y = c(rep("A",50),rep("B",50))) %>%
  group_by(y) %>%
  summarise(n = n())

# A tibble: 2 x 2
      y     n
  <chr> <int>
1     A    50
2     B    50