R中的data.frame(cbind ...)与data.frame(...)

时间:2015-05-07 12:36:32

标签: r

我想了解

的用法之间的区别
data.frame(a,b,c,y)

data.frame(cbind(a,b,c,y))

我有三个向量a,b,c,其中包含因子(文本)和一个(y),它们存储计数(数字)。

根据符号,我在运行此模型时会得到不同的答案

model.glm <- glm(y ~ a * b * c, data=blabla, family=poisson)

我想这是因为其中一个因素是制造因素“无因素”,但我不确定。 哪种方法是正确的?

2 个答案:

答案 0 :(得分:11)

默认情况下,cbind会返回matrix,只能有一种数据类型。混合数据类型(例如数字和字符)通常被强制转换为字符。例如:

a <- 1:3
b <- c("a", "b", "c")
cb <- cbind(a,b)
cb
     a   b
[1,] "1" "a"
[2,] "2" "b"
[3,] "3" "c"
class(cb)
[1] "matrix"
typeof(cb)
[1] "character"

当您将其传递给data.frame时,默认情况下,字符会转换为因子(StringsAsFactors = TRUE;设置为FALSE以抑制此行为),这基本上是字符串的整数表示形式

df <- data.frame(cb)
typeof(df$a)
[1] "integer"
typeof(df$b)
[1] "integer"
class(df$a)
[1] "factor"
class(df$b)
[1] "factor"

我假设这是您想要的行为,并且因为data.frame会很好地cbind为您保留其原始类型(除了将字符串转换为正如我所说,可以抑制因素,我会坚持使用更简单的data.frame(a,b)结构。

答案 1 :(得分:1)

cbind(a,b,c,y)返回一个不允许多种类型数据的矩阵。因此,如果a,b和c是数字而y是一个因子,则data.frame(cbind(a,b,c,y))仅包含因子。

没有cbind(),a,b和c不会转换为因子。