假设我有一个xtab(作为dplyr管道的最后一步构建),如下所示:
<li>
您可以使用...构建它
foreach
我想要做的是继续执行此管道,但是我不知道如何引用组名或其值。例如,这不起作用:
treatPer
treatGrp 0 1
0 7.2 8.4
1 6.3 9.1
即使这样做,我也不知道如何引用表中的值来.R > dput(x)
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"), call = xtabs(formula = x/1000 ~ treatGrp + treatPer,
data = .))
这样的新列,例如... %>%
xtabs(x/1000 ~ treatGrp + treatPer, data = .) %>%
group_by(attr(x, 'dimnames')$treatGrp)
Error in UseMethod("group_by_") :
no applicable method for 'group_by_' applied to an object of class "c('xtabs', 'table')"
(即mutate
)>
有什么建议吗?
(我想我可以percentagePointChange
然后执行计算并重新应用mutate(ppCh = (value - lag(value))/lag(value))
,但是由于我已经提出了这个建议,所以我会根据上述内容查看是否有人使用了recco ... )
答案 0 :(得分:0)
由于group_by
在数据帧上起作用,并且有一个表,因此会出现错误。您需要做的就是使用您选择的group_by
,as.data.frame
,as_data_frame
或其他可能的方法,将表强制为as_tibble
可以使用的东西。所有这些都将在管道中工作,因此您可以执行任何计算,创建xtab,将其管道传输到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