data.frame(cbind...) versus data.frame(...) in R

  • 本文关键字:data frame in cbind versus 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)

我想这是因为其中一个因素是"无因素",但我不确定。 哪种方式是正确的?

默认情况下,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)结构。

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

如果没有cbind(),A、B 和 C 不会转换为因子。

最新更新