与数据表和数据帧绑定

问题描述 投票:5回答:1

我对数据表和数据帧中cbind的特性有疑问。如果我要绑定一个数据帧(df)和一个数据表(dt),那么结果对象的类取决于第一个参数。

示例:

> dt<-data.table(x=c(1,2,3),y=c(2,3,4),z=c(3,4,5))
> df<-data.frame(x=c(1,2,3),y=c(2,3,4),z=c(3,4,5))
> dt
   x y z
1: 1 2 3
2: 2 3 4
3: 3 4 5

情况1 :(第一个参数作为数据帧)

>test_df<-cbind(df,dt)
>class(test_df)
[1] "data.frame"

情况2 :(第一个参数作为数据表)

>test_dt<-cbind(dt,df)
>class(test_dt)
[1] "data.table" "data.frame"

所以,我的问题是,在cbind没有data.table方法的两种不同情况下,如何才能将输出对象作为数据表和数据帧获得。

在合并函数中很明显,R根据第一个参数调用不同的合并函数(如果第一个参数是它调用的数据帧,数据帧,并且如果它是数据表,则它调用合并的数据表方法)。

r dataframe data.table cbind
1个回答
4
投票

[如果您查看cbind.data.frame的代码,您会发现data.table的情况存在检查:

cbind.data.frame
# function (..., deparse.level = 1) 
# {
#     if (!identical(class(..1), "data.frame")) 
#         for (x in list(...)) {
#             if (inherits(x, "data.table")) 
#                 return(data.table::data.table(...))
#         }
#     data.frame(..., check.names = FALSE)
# }
# <environment: namespace:base>

有点奇怪,我同意-我本来希望有cbind.data.table方法,但我想有一些很好的理由不这样做。

© www.soinside.com 2019 - 2024. All rights reserved.