用计数分组后不能使用更宽的数据透视表
Cant use pivot wider after grouping with count
今天,我使用了 dplyr 包中的 count()
和 group_by()
和 summarise()
。这是代码:
dplyr::group_by(QUARTER, PROVINCE, DATE) %>%
dplyr::summarise(COUNT = count(EDUCATION)) %>%
ungroup()
这是我的 df
在执行上面的代码后的样子:
Quarter PROVINCE DATE COUNT.x COUNT.freq
2020Q1 New-York 2020-01-07 1 30
2021Q1 New-York 2020-01-07 2 21
2020Q1 New-York 2020-01-07 3 55
2021Q1 New-York 2020-01-07 4 8
注意:COUNT.x
和 COUNT.freq
不是我自己创建的!现在,我试图将 COUNT.x
作为列,将 COUNT.freq
作为值。这意味着 pivot_wider()
将是这里的解决方案。但是,在尝试以下操作后:
pivot_wider(df, names_from = COUNT.x, values_from = COUNT.freq)
它说 COUNT.x
和 COUNT.freq
不存在:
Error: Can't subset columns that don't exist.
x Column `COUNT.x` doesn't exist
此外,检查 names(df)
给我:
[1] "QUARTER" "PROVINCE" "DATE" "COUNT"
不包括COUNT.x
和COUNT.freq
!
有人解决这个问题吗?
问题是 count
正在 summarise
中应用,导致数据。frame/tibble 列。它应该在外面,即
dplyr::count(df, QUARTER, PROVINCE, DATE, EDUCATION)
如果我们使用 OP 的代码,则它不是常规的 data.frame 列。我们需要重新调用 data.frame
来展平列
out <- df %>% dplyr::group_by(QUARTER, PROVINCE, DATE) %>%
dplyr::summarise(COUNT = count(EDUCATION)) %>%
ungroup()
out1 <- do.call(data.frame, out)
今天,我使用了 dplyr 包中的 count()
和 group_by()
和 summarise()
。这是代码:
dplyr::group_by(QUARTER, PROVINCE, DATE) %>%
dplyr::summarise(COUNT = count(EDUCATION)) %>%
ungroup()
这是我的 df
在执行上面的代码后的样子:
Quarter PROVINCE DATE COUNT.x COUNT.freq
2020Q1 New-York 2020-01-07 1 30
2021Q1 New-York 2020-01-07 2 21
2020Q1 New-York 2020-01-07 3 55
2021Q1 New-York 2020-01-07 4 8
注意:COUNT.x
和 COUNT.freq
不是我自己创建的!现在,我试图将 COUNT.x
作为列,将 COUNT.freq
作为值。这意味着 pivot_wider()
将是这里的解决方案。但是,在尝试以下操作后:
pivot_wider(df, names_from = COUNT.x, values_from = COUNT.freq)
它说 COUNT.x
和 COUNT.freq
不存在:
Error: Can't subset columns that don't exist.
x Column `COUNT.x` doesn't exist
此外,检查 names(df)
给我:
[1] "QUARTER" "PROVINCE" "DATE" "COUNT"
不包括COUNT.x
和COUNT.freq
!
有人解决这个问题吗?
问题是 count
正在 summarise
中应用,导致数据。frame/tibble 列。它应该在外面,即
dplyr::count(df, QUARTER, PROVINCE, DATE, EDUCATION)
如果我们使用 OP 的代码,则它不是常规的 data.frame 列。我们需要重新调用 data.frame
来展平列
out <- df %>% dplyr::group_by(QUARTER, PROVINCE, DATE) %>%
dplyr::summarise(COUNT = count(EDUCATION)) %>%
ungroup()
out1 <- do.call(data.frame, out)