R 带数据表和数据框的cbind
我有一个关于数据表和数据帧中的R 带数据表和数据框的cbind,r,dataframe,data.table,cbind,R,Dataframe,Data.table,Cbind,我有一个关于数据表和数据帧中的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 >dt-df-dt x y z 1: 1 2
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
>dt-df-dt
x y z
1: 1 2 3
2: 2 3 4
3: 3 4 5
案例1:(第一个参数作为数据帧)
>测试类(测试类)
[1] “数据帧”
案例2:(第一个参数作为数据表)
>test\u dtclass(test\u dt)
[1] data.table“data.frame”
因此,我的问题是,在两种不同的场景中,cbind
没有data.table方法,如何才能将输出对象作为数据表和数据帧
很明显,在merge函数中,R根据第一个参数调用不同的合并函数(如果第一个参数是它调用的数据帧,则为数据帧,如果是数据表,则为merge的数据表方法)
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.frame
#函数(…,deparse.level=1)
# {
#如果(!等同(类(…1),“data.frame”))
#对于(列表中的x(…)){
#if(继承(x,“data.table”))
#返回(data.table::data.table(…)
# }
#data.frame(…,check.names=FALSE)
# }
#
很奇怪,我同意-我本来希望有一个
cbind.data.table
方法,但我想有一些很好的理由不这么做。试试do.call(cbind,lappy(list(df,dt),setDT))
你总是可以直接调用方法。@RichardScriven是的,我们可以这样做,我只是想了解cbind在不同输入对象类别下的行为。解释如下:
>test_dt<-cbind(dt,df)
>class(test_dt)
[1] "data.table" "data.frame"
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>