2013-03-01 72 views
1

我正尝试创建一个大型的空data.frame并插入一组行。我在很多论坛上看到了一些类似的问题,但是我一直无法成功地应用它们中的任何一个来解决我所遇到的具体格式问题。将新行插入到数据框而不会丢失格式

我以rbind开头(df,allic)#allic是我想插入df#的数据框,但是,考虑到我的数据集的大小,操作需要5 1/2分钟才能完成。我知道在开始时创建数据框并替换行可以提高效率,但是我一直无法使它适用于我的问题。代码如下:

初始数据:

Order.ID     Product 
1 193505    Onion Rings 
2 193505 Pineapple Cheddar Burger 
3 193623   Fountain Soda 
4 193623    French Fries 
5 193623    Hamburger 
6 193623     Hot Dog 
7 193631    French Fries 
8 193631    Hamburger 
9 193631    Milkshake 

产品将不会匹配下面,然而,这是一个格式问题我想它最好的证明给我带来了我现在是在格式化。

nb$Order.ID <- as.factor(nb$Order.ID) 
plist <- aggregate(nb$Product,list(nb$Order.ID),list) 
allp <- unique(unlist(plist$x)) 
allic <- expand.grid(plist$x[[1]], Var2=plist$x[[1]], Var3=1) 


         Var1      Var2 Var3 
1    Onion Rings    Onion Rings 1 
2 Pineapple Cheddar Burger    Onion Rings 1 
3    Onion Rings Pineapple Cheddar Burger 1 
4 Pineapple Cheddar Burger Pineapple Cheddar Burger 1 

现在我创建一个使用一个空的数据帧(DF):

df <- data.frame(factor=rep(NA, rcnt), factor=rep(NA,rcnt), stringsAsFactors=FALSE) 

RCNT是我打算修剪一次操作完成一个大的,任意数量。我的问题是当我尝试插入这些行使用:

df[1:4,] <- allic 
head(df, n=10) 


    factor factor.1 
1  47  47 
2  51  47 
3  47  51 
4  51  51 
5  NA  NA 
6  NA  NA 
7  NA  NA 
8  NA  NA 

我怎么能在一个数据帧中插入行,而不会失去我的价值观的格式?我非常感谢在这一点上我能得到的任何帮助。

编辑每下面的评论:

>df[i] <- for(i in 1:nrow(plist)) { 
>  allic <- expand.grid(plist$x[[i]], Var2=plist$x[[i]], Var3=1) 
>  df[i:nrow(allic),] <- sapply(allic, as.character) 

我还是很新的与R,但是这时候我用DF <是工作 - rbind(DF,allic)。 nrow(DF)是4096

+0

嗨@ LFoos24,这不是很清楚你所要完成的是什么,但我猜有可能是其他途径去解决它。 – 2013-03-02 05:20:58

+0

@ Ricardo我相信你在这个说法中是正确的。再说一遍,我对这件事还是比较陌生的,并且一起劈砍我能做的工作。我试图完成的是循环所有的订单,以获得排列在一起的项目的所有组合,用1标记每个组合,并加起来组合以显示每个组合的计数。希望这在一定程度上有所帮助。 – LFoos24 2013-03-02 05:34:47

+0

开辟一个新的问题可能会有所帮助,只是要解释所有组合在一起排列的项目,解释你尝试过的方法,并询问是否有更有效的方法去解决它。在这里有一些非常聪明的人,我肯定会愿意给一些有用的建议 – 2013-03-02 17:27:28

回答

1

尝试在as.character包装allic如下:

df[1:4,] <- sapply(allic, as.character) 


> df 
        factor     factor.1 
1    Onion Rings    Onion Rings 
2 Pineapple Cheddar Burger    Onion Rings 
3    Onion Rings Pineapple Cheddar Burger 
4 Pineapple Cheddar Burger Pineapple Cheddar Burger 
5      <NA>      <NA> 
6      <NA>      <NA> 
7      <NA>      <NA> 
8      <NA>      <NA> 
9      <NA>      <NA> 
10      <NA>      <NA> 
+0

完美的作品!谢谢。任何想法为什么当我将它代入我的循环(df < - rbind(df,allic)---- >> df [i:nrow(allic),] < - sapply(allic,as.character))错误“新列将在现有列之后留下空洞”? – LFoos24 2013-03-02 00:02:07

+0

我的价值是什么? nrow(df)的价值是什么? – 2013-03-02 01:20:07

+0

我添加了上面的编辑来回答你的问题。 – LFoos24 2013-03-02 01:45:36

相关问题