为什么Rstudio数据查看器过滤被dplyr分组表破坏?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么Rstudio数据查看器过滤被dplyr分组表破坏?相关的知识,希望对你有一定的参考价值。

使用data viewer in Rstudio version 0.99,我想按国家名称(或其他字符向量)过滤dplyr分组表。这打破了数据查看器。 Rstudio说“无法对数据进行排序或过滤”,R返回的错误非常神秘:

Error in vapply(x[[col]], `[`, 0, 1) : values must be type 'double',
 but FUN(X[[1]]) result is type 'character'

虹膜样本数据的示例

我可以使用虹膜样本数据集重现这一点。

irisgrouped <- iris %>% 
    mutate(Species = as.character(Species)) %>% # Change to a character vector
    group_by(Sepal.Length)

Species的数据查看器过滤打破了"failure to sort or filter data"消息。

基于我使用的数据的示例

这里也是使用dput()的数据集的一部分

library(dplyr)


dtf <- structure(list(itemcode = c(1632, 1632, 1632, 1632, 1632, 1632
), year = c(1961L, 1961L, 1961L, 1961L, 1961L, 1961L), country = c("Albania", 
                                                                   "Austria", "Bulgaria", "Denmark", "Finland", "France")), .Names = c("itemcode", 
                                                                                                                                       "year", "country"), row.names = c(NA, -6L), class = "data.frame")

以上内容可以粘贴在R命令中,R studio表查看器中的过滤没有问题。但是,如果我再次对数据框进行分组:

dtf2 <- dtf %>% group_by(itemcode) 

过滤中断消息“无法排序或过滤数据”。

你能指出我为什么过滤器不能处理分组数据帧中的某些字符向量的原因吗?

sessionInfo()

如果这很重要,这是我的sessionInfo()

R version 3.1.1 (2014-07-10)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_IE.UTF-8      LC_NUMERIC=C             
 [3] LC_TIME=en_IE.utf8        LC_COLLATE=en_IE.UTF-8   
 [5] LC_MONETARY=en_IE.utf8    LC_MESSAGES=en_IE.UTF-8  
 [7] LC_PAPER=en_IE.utf8       LC_NAME=C                
 [9] LC_ADDRESS=C              LC_TELEPHONE=C           
[11] LC_MEASUREMENT=en_IE.utf8 LC_IDENTIFICATION=C      

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] dplyr_0.4.1

loaded via a namespace (and not attached):
[1] assertthat_0.1  DBI_0.3.1       lazyeval_0.1.10 magrittr_1.5   
[5] parallel_3.1.1  Rcpp_0.11.4     tools_3.1.1    
答案

我可以确认我得到了同样的错误。我在Windows 8.1上使用当前RStudio预览(0.99.441)上的dplyr 0.4.1运行以下内容。

dtf <- structure(list(itemcode = c(1632, 1632, 1632, 1632, 1632, 1632
), year = c(1961L, 1961L, 1961L, 1961L, 1961L, 1961L), country = c("Albania",
"Austria", "Bulgaria", "Denmark", "Finland", "France")), .Names = c("itemcode", 
"year", "country"), row.names = c(NA, -6L), class = "data.frame")

dtfGrouped <- dtf %>% group_by(itemcode)

View(dtfGrouped)

单击“筛选”,然后键入国家/地区名称会导致此操作失败。

但是,View(as.data.frame(dtfGrouped))然后点击Filter工作。

另一答案

这个问题是由于R中的“bug”造成的。 这可以通过使用aggregate函数来返回多个值来复制:

尝试类似:(以下未经测试)

newDF <- aggregate(formula = val ~ id1 + id2,data = x,FUN = function(x) c(mn = mean(x), n = length(x) ))

如果检查长度,新的“列”实际上将具有2*nrow(x)的长度。它不是真正的数据帧,但是这个类仍然是“data.frame

干杯。

以上是关于为什么Rstudio数据查看器过滤被dplyr分组表破坏?的主要内容,如果未能解决你的问题,请参考以下文章

时间序列分组和过滤器在dplyr r中

R语言使用dplyr包聚合(group_by)数据并过滤(fiter)之后再拆开聚合数据(ungroup取消组合)使用ggplot2可视化拆开分组后的线图(line plot)

dplyr:根据不同条件分组,然后返回top n

在 R 中使用 dplyr 进行过滤时,为啥过滤掉的变量级别会保留在过滤后的数据中? [复制]

R语言使用skimr包的skim函数查看使用dplyr包的groupby函数分组后dataframe的summary信息统计汇总信息(Handle grouped data)

dplyr - 按组大小过滤