【发布时间】:2017-05-23 15:47:54
【问题描述】:
其他问题(here 和here)建议使用sapply(df, class) 来获取列类的向量(类似于pandas.DataFrame.dtypes)。
如何正确工作的示例:
# make some example data
n <- 10
categories <- c('jacket','t-shirt','leg warmers')
colors <- c('teal','neon yellow','hot pink')
sizes <- c('XS','S','M','L','XL')
items <- data.frame(item_id = 1:n,
item_category = sample(categories, n, r=TRUE),
item_color = sample(colors, n, r=TRUE),
item_size = sample(sizes, n, r=TRUE))
sapply(items, class) # returns character vector of length 4
# item_id item_category item_color item_size
# "integer" "factor" "factor" "factor"
但是,如果至少有一列是有序因子,sapply(df, class) 会返回一个列表。
items2 <- items
items2$item_size <- factor(items2$item_size, levels=sizes, ordered=TRUE)
sapply(items2, class) # returns list of 4
# $item_id
# [1] "integer"
#
# $item_category
# [1] "factor"
#
# $item_color
# [1] "factor"
#
# $item_size
# [1] "ordered" "factor"
请注意,sapply(items2, typeof) 仍然返回一个向量,尽管列 types(discussion 为何不同)返回“integer”,即因子类的存储模式。
我需要一个用于预处理例程的类向量,而我真的只对 主类 感兴趣(“因子”而不是“有序”)。最好的方法是什么?
我的自我回答的解决方案可能不是最可靠的,所以我欢迎替代方案。
【问题讨论】: