【问题标题】:Inserting new rows to dataframe without losing format在不丢失格式的情况下将新行插入数据框
【发布时间】:2013-02-16 12:50:40
【问题描述】:

我正在尝试创建一个大的空 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

【问题讨论】:

  • 嗨@LFoos24,目前还不清楚您要完成什么,但我猜可能还有其他方法可以解决。
  • @Ricardo 我相信你的断言是正确的。再说一次,我对此还很陌生,并且尽我所能来完成这项工作。我想要完成的是遍历所有订单以获取一起订购的项目的所有组合,用 1 标记每个组合,然后将组合相加以显示每个组合的计数。希望这在一定程度上有所帮助。
  • 打开一个新问题可能会有所帮助,简单地解释您想要计算一起订购的所有项目组合,解释您尝试过的内容并询问是否有更有效的方法去做吧。这里有一些非常聪明的人,我相信他们会愿意提供一些有用的建议

标签: r dataframe insertion


【解决方案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>

【讨论】:

  • 完美运行!谢谢你。知道为什么当我将它替换到我的循环中时 (df > df[i:nrow(allic),]
  • i的值是多少? nrow(df) 的值是多少?
猜你喜欢
  • 2016-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
  • 2022-10-23
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
相关资源
最近更新 更多