其他问题(docs和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)
仍然会返回一个向量,虽然列类型(here为什么会有所不同),它返回&#34;整数&#34;,因子类的存储模式。
我需要一个用于预处理例程的类向量,我真的只对主类感兴趣(&#34;因素&#34;不是&#34;有序&#34)。这样做的最佳方式是什么?
我自己回答的解决方案可能不是最强大的,所以我欢迎替代方案。
答案 0 :(得分:2)
根据?class
,函数返回&#34;一个对象继承的类向量。&#34;
假设它们按照第一个继承自第二个继承的顺序返回,等等,主类将在序列中的最后一个:
sapply(items2, function(x) tail(class(x),1) )
# item_id item_category item_color item_size
# "integer" "factor" "factor" "factor"