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
为什么我收到上述错误?
答案 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)
在此特定示例中,dat
是character
的矩阵; 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" ...