cbind 数据 table 和数据框
cbind with data table and data frame
我有一个关于数据 table 和数据框中 cbind
的特征的问题。
如果我正在绑定一个数据框 (df) 和一个数据 table(dt),那么结果对象的 class 取决于第一个参数。
示例:
> 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
情况一:(第一个参数为数据框)
>test_df<-cbind(df,dt)
>class(test_df)
[1] "data.frame"
情况2:(第一个参数作为数据table)
>test_dt<-cbind(dt,df)
>class(test_dt)
[1] "data.table" "data.frame"
所以,我的问题是如何在两种不同的场景中将输出对象作为数据 table 和数据框获取,其中 cbind
没有 data.table方法。
在合并函数中很明显,R 根据第一个参数调用不同的合并函数(如果第一个参数是它调用的数据帧,数据帧,如果它是数据 table,它调用合并的数据table方法。
如果您查看 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
方法,但我想有一些很好的理由不这样做。
我有一个关于数据 table 和数据框中 cbind
的特征的问题。
如果我正在绑定一个数据框 (df) 和一个数据 table(dt),那么结果对象的 class 取决于第一个参数。
示例:
> 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
情况一:(第一个参数为数据框)
>test_df<-cbind(df,dt)
>class(test_df)
[1] "data.frame"
情况2:(第一个参数作为数据table)
>test_dt<-cbind(dt,df)
>class(test_dt)
[1] "data.table" "data.frame"
所以,我的问题是如何在两种不同的场景中将输出对象作为数据 table 和数据框获取,其中 cbind
没有 data.table方法。
在合并函数中很明显,R 根据第一个参数调用不同的合并函数(如果第一个参数是它调用的数据帧,数据帧,如果它是数据 table,它调用合并的数据table方法。
如果您查看 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
方法,但我想有一些很好的理由不这样做。