使用cbind和loop函数制作独特的data.frame

时间:2019-07-08 01:01:03

标签: r loops dataframe

我正在使用cbind和loop函数生成多个数据表。

让我们假设我有两个data.frame。每个data.frame为100 * 10。

first<-data.frame(replicate(10,sample(0:1,100,rep=TRUE)))
second<-data.frame(replicate(10,sample(2:10,100,rep=TRUE)))

second data.frame的每一列都与first data.frame绑定,生成十个100 * 11 data.frame(second data.frame的第一+一列)

所以,我创建了这样的循环函数。

for (i in 1:10){
cbind(first,second[,i])}

此功能有两个问题。

首先。运行之后,什么也没发生。仅此语法出现在控制台窗口中。

> for (i in 1:10){
+ ti<-cbind(first,second[,i])}

第二,我想将结果保存在每个不同的对象中,例如t1t2t3,....,t10。所以,我运行了这段代码。

for (i in 1:10){
ti<-cbind(first,second[,i])}

但是,您可能会想,它将结果重复保存在“ ti”对象中。因此,ti对象是first数据帧+ second data.frame的第十列。

如何制作10个不同的对象,例如t1t2t3t4 ...,t10

*其他问题:实际上,实际工作中的second data.frame超过100列。因此,产生的对象是t1t2,.... t100,....并继续。有没有办法保存这些有组织的对象?

* Akrun答案的其他问题

非常感谢您的帮助。奏效了!

但是,有一个新问题。我要对结果进行的处理有点复杂。

让我们以t1列表中的lst1对象为例。这需要两个步骤。

我想使用data.matrix对象执行t1函数,并将data.matrix的结果放入predict函数中。 (由于功能原因,predict的原始功能只能计算data.matrix

如果是data.frame,我会跑

data.matrix(t1) predict(orginalfunction,newx=t1,matrix=TRUE)

但是,在阅读您的答案后,我认为将lapply与list一起使用是正确的。 data.frame太乱了。

但是,如何将data.matrix函数应用于列表的每个对象并将其放入predict函数中?

1 个答案:

答案 0 :(得分:1)

一个选项是lapply。循环浏览“第二”列,然后cbind在“第一”列中创建新列,并用选择的名称设置list的名称。正如@thelatemail提到的(并完全同意),最好不要在全局环境中创建对象,而应使用list之类的工具从lapply/sapply/vapply本身进行保存,存储,处理和写入

lst1 <- lapply(second, function(x) cbind(first, newcol = x))
names(lst1) <- paste0("t", seq_along(lst1))

由于它是list,因此我们可以使用lapply遍历列表

lapply(lst1, function(x) predict(originalfunction, newx = x, matrix = TRUE))