r dplyr filter error - 列具有不受支持的类型

时间:2014-11-27 23:25:32

标签: r dplyr

场合

我的数据框df包含两个变量,ReportYearSalary

dput(df)

structure(list(ReportYear = structure(c(2012, 2012, 2012, 2012, 
2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 
2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 
2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 
2012, 2012, 2012, 2012, 2012), class = c("summaryDefault", "table"
)), Salary = structure(c(198000, 495500, 745000, 1417000, 1662000, 
5483000, 260100, 460000, 697000, 1595000, 2160000, 5778000, 331000, 
790000, 1260000, 1736000, 1670000, 9310000, 270000, 459500, 602000, 
1355000, 984200, 6191000, 290000, 463200, 564500, 1420000, 779500, 
6779000, 650300, 1448000, 2076000, 2907000, 3894000, 6938000, 
157000, 404800, 481000, 1074000, 1199000, 4603000), class = c("summaryDefault", 
"table"))), row.names = c(NA, -42L), class = "data.frame", .Names = c("ReportYear", 
"Salary"))

我尝试filter数据,但收到错误:

library(dplyr)
df <- filter(df, Salary > 10)
Error: column 'ReportYear' has unsupported type

问题

有谁知道为什么我的ReportYear是错误的类型?是否与&#34;列表&#34;结构,如果是这样,我如何解决它,以便filter数据?

其他笔记

> str(df)
'data.frame':   42 obs. of  2 variables:
 $ ReportYear:Classes 'summaryDefault', 'table'  num [1:42] 2012 2012 2012 2012 2012 ...
 $ Salary    :Classes 'summaryDefault', 'table'  num [1:42] 198000 495500 745000 1417000 1662000     ... 
> 

数据由summary生成。

2 个答案:

答案 0 :(得分:5)

它似乎是错误的类型,因为列来自summary.default。请参阅summary() help file部分。

  

默认方法返回类c的对象(“summaryDefault”,“table”),该对象具有专门的打印方法。

首先要知道如何创建数据,但是您可以使用unclass删除这些类,然后您的代码就能正常运行。

df[] <- lapply(df, unclass)
filter(df, Salary > 10)

我不确定这是否是标准的预期行为。

答案 1 :(得分:2)

很难说你的专栏最终会成为“SummaryDefault”和“table”类,而不知道你是如何创建数据的。

要解决过滤器问题并将列重新设置为数字类型,您可以使用mutate_each,例如:

mutate_each(df, funs(as.numeric)) %>% filter(Salary > 10)