繁体   English   中英

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

[英]rbind/data.frame conversion type hierarchy R

谁能在使用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"

看一下?cbind (或?rbind )的Value部分:

“矩阵结果的类型由层次结构中原始的任何输入的最高类型确定<逻辑<整数<双<复数<字符<列表”

取决于层次结构的一些强制性示例:

# 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数据帧方法 ”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM