我想我正在为rbind.fill
寻找plyr
的类似物(在Hadley的cbind
包中)。我看了看,但是没有cbind.fill
。
我想做的是以下几点:
#set these just for this example
one_option <- TRUE
diff_option <- TRUE
return_df <- data.frame()
if (one_option) {
#do a bunch of calculations, produce a data.frame, for simplicity the following small_df
small_df <- data.frame(a=1, b=2)
return_df <- cbind(return_df,small_df)
}
if (diff_option) {
#do a bunch of calculations, produce a data.frame, for simplicity the following small2_df
small2_df <- data.frame(l="hi there", m=44)
return_df <- cbind(return_df,small2_df)
}
return_df
可以理解,这会产生一个错误:
Error in data.frame(..., check.names = FALSE) :
arguments imply differing number of rows: 0, 1
我当前的解决方法是将
return_df <- data.frame()
行替换为return_df <- data.frame(dummy=1)
,然后该代码起作用。然后,我只需从return_df
的最后删除虚拟对象。添加虚拟对象并运行上面的代码后,我得到 dummy a b l m
1 1 1 2 hi there 44
然后我只需要摆脱虚拟对象,例如:
> return_df[,2:ncol(return_df)]
a b l m
1 1 2 hi there 44
我确定我缺少一种更简单的方法来执行此操作。
编辑:我想我不是在寻找cbind.fill,因为那将意味着将在cbind之后创建一个NA值,这不是我想要的。
最佳答案
这是一个绑定(bind)填充:
cbind.fill <- function(...){
nm <- list(...)
nm <- lapply(nm, as.matrix)
n <- max(sapply(nm, nrow))
do.call(cbind, lapply(nm, function (x)
rbind(x, matrix(, n-nrow(x), ncol(x)))))
}
让我们尝试一下:
x<-matrix(1:10,5,2)
y<-matrix(1:16, 4,4)
z<-matrix(1:12, 2,6)
cbind.fill(x,y)
cbind.fill(x,y,z)
cbind.fill(mtcars, mtcars[1:10,])
我想我是从某个地方偷来的。
从此处编辑脚本:LINK
关于r - 将数据框与空数据框绑定(bind)-cbind.fill?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7962267/