【发布时间】:2014-03-12 20:51:58
【问题描述】:
在使用 rbind 和 data.frame 时,谁能系统地向我解释字符/数字/因子之间类型转换的层次结构?
在我的理解中,rbind 放在一个矩阵中,矩阵只能有一种类型。因此,如果存在类型冲突,将转换为什么类型?其他类型的矩阵创建函数(例如cbind、matrix)是否以同样的方式工作?示例:
> sapply(rbind("a", "b"), class)
a b
"character" "character"
> sapply(rbind(1, "b"), class)
1 b
"character" "character"
另一方面,一个数据框可以包含多种类型,因此data.frame 保留原始类型,除了它总是尝试将字符转换为因子。 (这是正确的吗?这对我来说非常违反直觉。)
同样的逻辑,不管是factor(c(1,2))还是factor(c("a", "b")),一个因子类型永远保持因子是正确的吗?
> sapply(data.frame("a", "b"), class)
X.a. X.b.
"factor" "factor"
> sapply(data.frame(1, "b"), class)
X1 X.b.
"numeric" "factor"
> sapply(data.frame(1, factor("a")), class)
X1 factor..a..
"numeric" "factor"
【问题讨论】:
-
在
data.frame或您的全局选项中查看参数stringsAsFactors。 -
我知道有这样的事情。我要求系统地解释哪种类型在转换中具有优先权。
标签: r matrix type-conversion dataframe