场合
我的数据框df
包含两个变量,ReportYear
和Salary
。
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
生成。
答案 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)