[英]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.