Вы получаете ошибку, потому что group_by
работает с кадрами данных, и у вас есть таблица. Все, что вам нужно сделать, - это принудить таблицу к чему-то, с чем может работать group_by
, используя ваш выбор as.data.frame
, as_data_frame
, as_tibble
или, возможно, некоторые другие. Каждый из них будет работать в конвейере, поэтому вы можете делать все, что у вас есть, создать xtab, pipe, который в as_data_frame
, а затем продолжить работу.
Как я уже сказал в своем комментарии ранее, я не смог прочитать данные с включенной формулой, потому что это относится к кадру данных над ним в конвейере.
library(tidyverse)
xtab <- structure(c(7.2, 6.3, 8.4, 9.1), .Dim = c(2L, 2L), .Dimnames =
structure(list(treatGrp = c("0", "1"), treatPer = c("0", "1")),
.Names = c("treatGrp", "treatPer")), class = c("xtabs", "table"))
Преобразование с помощью as_data_frame
дает вам следующее:
as_data_frame(xtab)
#> # A tibble: 4 x 3
#> treatGrp treatPer n
#> <chr> <chr> <dbl>
#> 1 0 0 7.2
#> 2 1 0 6.3
#> 3 0 1 8.4
#> 4 1 1 9.1
После этого вы можете выполнять обычные операции с помощью group_by
и всего остального. Вот один пример:
as_data_frame(xtab) %>%
group_by(treatGrp) %>%
summarise(avg_n = mean(n))
#> # A tibble: 2 x 2
#> treatGrp avg_n
#> <chr> <dbl>
#> 1 0 7.8
#> 2 1 7.7
Или построить целый конвейер на основе примера в документах xtabs
:
library(tidyverse)
as_data_frame(UCBAdmissions) %>%
xtabs(n ~ Gender + Admit, data = .) %>%
as_data_frame() %>%
group_by(Gender) %>%
mutate(rate = n / sum(n))
#> # A tibble: 4 x 4
#> # Groups: Gender [2]
#> Gender Admit n rate
#> <chr> <chr> <dbl> <dbl>
#> 1 Female Admitted 557 0.304
#> 2 Male Admitted 1198 0.445
#> 3 Female Rejected 1278 0.696
#> 4 Male Rejected 1493 0.555
Не уверен, правильно ли я понимаю проблему.
Как насчет передачи скрытого поля в вашей форме (которое, насколько я понимаю, будет указывать на то же отображение в вашем контроллере), указывающего, с какого jsp приходит запрос? Таким образом, вы знаете, какой JSP перезвонить с вашего контроллера.