rbind / data.frame转换类型层次结构R.

时间:2014-02-13 19:08:59

标签: r matrix type-conversion dataframe

在使用rbind和data.frame时,有没有人可以系统地向我解释字符/数字/因子之间的类型转换层次结构?

根据我的理解,rbind将矩阵放在一起,只能有一种类型。因此,如果存在类型冲突,那么将转换为什么类型?其他类型的矩阵创建函数(例如cbindmatrix)的工作方式是否相同?例如:

> 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"

1 个答案:

答案 0 :(得分:3)

查看?cbind(或?rbind)的部分:

“矩阵结果的类型根据层次结构中的任何输入的最高类型确定< logical< integer< double< complex< character< list”

强制取决于等级的一些例子:

# logical
a <- c(FALSE, TRUE)

# integer
b <- 0:1

# double
c <- c(0, 1.0)

# character
d <- c("0", "1")


m1 <- cbind(a, b)
m1
str(m1)
# logical converted to integer

m2 <- cbind(b, c)
m2
str(m2)
# integer converted to double

m3 <- cbind(c, d)
m3
str(m3)
# double converted to character

另请参阅?cbind中的“数据框方法”。