我正在尝试创建一个大的空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&lt; - rbind(df,allic)时,这是有效的。 nrow(df)是4096。
答案 0 :(得分: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>