51data 发表于 2020-9-17 17:18:11

Data.frame与cbind的区别

结论:data.frame 产生的结果是数据帧,可以用$引用列。当cbind引用的数据中没有数据帧时,其产生的结果是矩阵matrix,不能使用$引用;当cbind引用的数据中有数据帧时,其产生的结果也是数据帧,但不会自动重命名重复的列名。 示例:有如下3组基础变量(向量长度相同):> col1<-c(1,2,3,4,5,6,1,2,3,4,5,6)> col2<-c('a','b','c','a','b','c','a','b','c','a','b','c')> col3<-c('A','A','A','A','A','A','B','B','B','B','B','B')分别使用data.frame与cbind构造新变量> f1<-data.frame(col1,col2,col3)> f2<-cbind(col1,col2,col3)f1与f2结果看起来一样,如下图:   但实际上两者的类型不一样,f1是数据帧,而f2是矩阵。> class(f1)"data.frame"> class(f2)"matrix" "array" 当cbind引用的参数中有数据帧时,其结果也为数据帧,如:> f3<-cbind(col1,f1)> class(f3)"data.frame"
当cbind引用的参数中有数据帧且有重复列名时,cbind不会自动重命名列名,而data.frame会。> f4<-data.frame(f1,f1)> f5<-cbind(f1,f1)f4与f5的结果对比如下,可以看到f4后3列的列名变了:当引用的数据长度不一致时,data.frame和cbind均会报错。如向量col4的长度为10,而向量col1的长度为12:> col4<-c(1,2,3,4,5,6,7,8,9,10)> f6<-data.frame(col1,col4)Error in data.frame(col1, col4) : 参数值意味着不同的行数: 12, 10> f7<-cbind(col1,col4)Warning message:In cbind(col1, col4) :number of rows of result is not amultiple of vector length (arg 2) 不过data.frame可以传入固定值,如:> f8<-data.frame("idata8.com",as.character(col2),col1)其中idata8.com为固定值,as.character(col2)取向量col2的第一个值,也可以视为固定值,结果如下。


页: [1]
查看完整版本: Data.frame与cbind的区别