【发布时间】:2016-07-11 11:06:28
【问题描述】:
对不起,如果这个标题令人困惑,但我不太清楚如何措辞这个问题,这可能是我似乎无法找到正确功能的原因。
基本上,假设我有这个:
articles <- c(237, 278, 354, 600)
ind <- seq(1, length(articles))
DF <- data.frame(x=c(237, 237, 278, 278, 278, 354, 600, 600, 600),
y=rnorm(9))
我想用articles 向量中的相应index 替换DF$x 中的所有值。比如,我希望237 变成1 和278 变成2 等等。
我已经构建了一个 for 循环来执行此操作,但我真正的 data.frame 要大得多,我觉得必须有一种更有效的方法来完成此操作。这是我的 for 循环,以便您可以看到我想要的最终结果:
for (i in 1:length(articles)) {
DF[DF$x==articles[i], 1] <- ind[i]
}
我查看了replace 函数,但似乎没有这样做。此外,实际上,这是一个 data.table(来自 {data.table} 包),而不是一个 data.frame。如有必要,我显然可以将其转换为 data.frame,但如果在 data.table 包中有更有效的方法来做到这一点,那就太棒了。
非常感谢。 赛斯
【问题讨论】:
-
如果是data.table,那么
DF[, ind := match(x, articles)]或者更复杂的artDT = data.table(x = articles)[, idx := .I]; DF[artDT, idx := i.idx, on="x"]
标签: r for-loop replace dataframe data.table