1

使用 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
4

2 回答 2

0

我猜你可能不需要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
于 2015-05-01T21:37:11.773 回答
0

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

数据

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"]]) 您将得到与使用美元符号时相同的不充分结果。

于 2017-08-09T09:26:18.040 回答