繁体   English   中英

cbind将数据帧强制转换为矩阵

[英]cbind coerces a data frame to matrix

使用cbind时遇到问题。 在使用cbind之前,对象是两个字符向量的data.frame。

在我使用cbind添加列之后,data.frame对象将类更改为矩阵。 我试过as.vector,将h声明为空字符矢量,等等,但无法解决。 感谢您的任何建议和帮助。

output <- data.frame(h = character(), st = character()) ## empty dataframe
st <- state.abb 
h <- (rep("a", 50))
output <- cbind(output$h, h) ## output changes to matrix class here
output <- cbind(output, st) ## adding a second column

我猜您可能不需要cbind()

output <- data.frame(state = state.abb, h = rep("a", 50))
head(output)
state h
1    AL a
2    AK a
3    AZ a
4    AR a
5    CA a
6    CO a

@ Ken我不确定您实际上想获得什么,但是如果将变量保存在列表中可能会更容易。 下面是一个例子。

state <- state.abb
h <- rep("a", 50)

lst <- list(state = state, h = h)
mat <- as.matrix(do.call(cbind, lst))
head(mat)
state h  
[1,] "AL"  "a"
[2,] "AK"  "a"
[3,] "AZ"  "a"
[4,] "AR"  "a"
[5,] "CA"  "a"
[6,] "CO"  "a"

df <- as.data.frame(do.call(cbind, lst))
head(df)
state h
1    AL a
2    AK a
3    AZ a
4    AR a
5    CA a
6    CO a

作为补充信息,请注意,您可以使用单括号表示法使其与原始代码相似:

数据

output <- data.frame(h = letters[1:5],st = letters[6:10])
h2 <- (rep("a", 5))

这行不通

cbind(output$h, h2)
#          h2  
# [1,] "1" "a"
# [2,] "2" "a"
# [3,] "3" "a"
# [4,] "4" "a"
# [5,] "5" "a"
class(cbind(output$h, h2)) # matrix

这是一个矩阵,并且因子已被强制数字化

这会工作

cbind(output["h"], h2)
#   h h2
# 1 a  a
# 2 b  a
# 3 c  a
# 4 d  a
# 5 e  a
class(cbind(output["h"], h2)) # data.frame

请注意,使用双括号( output[["h"]] )时,您会得到与使用美元表示法时同样的结果不足。

暂无
暂无

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

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