【问题标题】:overfloating row indicator in dataframe数据框中的浮动行指示器
【发布时间】:2012-10-21 14:51:20
【问题描述】:

我正在尝试将一行附加到 R 中的现有数据框。数据框代表一个主题,我想用新(生成的)数据更新它。当我运行它时,数据框的索引号变得奇怪:

1, 2、 21, 211, 2111, 21111等

这些不适合阅读。 如何获得“正常”的索引号? (1、2、3、4 等)。

x <- 10
y <- 463
dat <- data.frame(x,y)

for (i in 1:10) {
dat.sub <- dat[nrow(dat),]       # select the last row from 'dat'
dat.sub <- within(dat.sub, {     # within that selection update the objects
    x <- x+1
    y <- y+1
})
dat <- rbind(dat, dat.sub, deparse.level = 2)   # attach updated row to the 'dat'
}

dat
dat[3,]

【问题讨论】:

  • 1) 永远不要在循环中增长对象(通过rbindccbind 等);在循环之前预先分配整个结果并通过子集填充元素。 2)您可以设置rownames(dat) &lt;- NULL 将它们设置为它们的“正常”数字。

标签: r dataframe rbind


【解决方案1】:

我认为问题在于 dat.sub 具有 data.frame 类并且在第二行之后具有相同的索引号。最简单的方法是更改​​dat.sub 的类而不分配任何索引。一种方法是:

dat.sub <- c(within(dat.sub, {     # within that selection update the objects
    x <- x+1
    y <- y+1
}))

for 循环中添加c,将dat.sub 作为向量。

【讨论】:

  • 谢谢!但是,我只想更新我更复杂的模型中的一些变量(例如只更新 x),而不必在 c 中分配 all 对象。我在y &lt;- y+1 之后添加了rownames(dat.sub) &lt;- NULL,以替代@Jushua Ulrich 的建议。我没有直接看到在对象中构建增长循环的问题。但是,我不是一个有经验的用户。最后一点,我尝试制作一个矩阵主题,但不幸的是我不能在矩阵(或向量)上使用within 函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 2013-08-28
  • 1970-01-01
相关资源
最近更新 更多