在for循环中的data.frame()上使用cbind()时出现R错误

时间:2012-03-29 19:04:44

标签: r

d <- data.frame(stringsAsFactors=F)

for (i in 1:ncol(data)) { d <- cbind(d,data[,i])}

Error in data.frame(..., check.names = FALSE) : 
  arguments imply differing number of rows: 0, 132680

为什么我收到上述错误?

2 个答案:

答案 0 :(得分:3)

可能由于R告诉你它出错的确切原因:你试图cbind的两个项目一起有不同的行数。

您的数据框d是emtpy,因此有0行。显然,您的数据框data(顺便提一下,您提供的零信息)有132680行。

可能有更好的方法来做你正在尝试的事情(cbind for循环中的列通常不是非常优秀的),但很难提出没有更多细节的解决方案。

答案 1 :(得分:0)

有可能按照你上面的方式破解解决方案,但你可能不想这样做。你的目标是什么?

d <- data.frame(matrix(ncol=0,nrow=5),stringsAsFactors=FALSE)
set.seed(101)
dat <- matrix(sample(LETTERS,replace=TRUE,size=10),ncol=2)
for (i in 1:ncol(dat)) { d <- cbind(d,dat[,i])}
d2 <- as.data.frame(dat,stringsAsFactors=FALSE)

在此特定示例中,datcharacter的矩阵; d是一个包含两个factor列的数据框(注意stringsAsFactors=FALSE 设置数据框的属性,因此你以后的cbind()电话会促使转换为因素!);并且d2可能是(???)您想要的,原始数据集转换为数据框......

> str(dat)
 chr [1:5, 1:2] "J" "B" "S" "R" "G" "H" "P" "I" "Q" "O"
> str(d)
'data.frame':   5 obs. of  2 variables:
 $ dat[, i]: Factor w/ 5 levels "B","G","J","R",..: 3 1 5 4 2
 $ dat[, i]: Factor w/ 5 levels "H","I","O","P",..: 1 4 2 5 3
> str(d2)
'data.frame':   5 obs. of  2 variables:
 $ V1: chr  "J" "B" "S" "R" ...
 $ V2: chr  "H" "P" "I" "Q" ...