[英]Why is Rstudio data viewer filtering broken by dplyr grouped tables?
使用Rstudio 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"
数据查看器过滤与消息"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()
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))
,然后单击“过滤器”即可。
此问题是由于R中的“错误”引起的。
这可以通过使用聚合函数返回多个值来复制:
尝试类似的方法:(以下内容未经测试)
newDF <- aggregate(formula = val ~ id1 + id2,data = x,FUN = function(x) c(mn = mean(x), n = length(x) ))
如果您检查长度,新的“列”的长度实际上将为2*nrow(x)
。 它不是一个真正的数据data.frame
,但该类仍然是“ data.frame
”
干杯。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.