在R中:用来自匹配向量的索引替换数据帧中的值

时间:2016-03-23 23:01:59

标签: r for-loop replace dataframe data.table

很抱歉,如果这个标题令人困惑,但我无法弄清楚如何说出这个问题,这可能就是为什么我似乎无法找到合适的功能。

基本上,我说有这个:

articles

我想用237向量中的相应索引替换DF $ x中的所有值。如我所知,我希望1成为2782成为for (i in 1:length(articles)) { DF[DF$x==articles[i], 1] <- ind[i] } 等。

我已经构建了一个执行它的for循环,但是我的真实data.frame要大得多,我觉得必须有一个更有效的方法来实现它。这是我的for循环,以便您可以看到我想要的最终结果:

replace

我查看了public double discrim (double a, double b, double c) { return (b*b)-(4*a*c); } public int numRoots (double a, double b, double c) { double d = discrim (a,b,c); if (d>0) return 2; else if (d<0) return 0; else return 1; } 函数,但似乎没有这样做。而且,实际上,这是一个data.table(来自{data.table}包),而不是data.frame。如果有必要,我显然可以将它转换为data.frame,但是如果有一种更有效的方法可以在data.table包中执行此操作,那将是非常棒的。

非常感谢。 塞特

2 个答案:

答案 0 :(得分:2)

你可以尝试:

DF$x <- as.numeric(as.factor(DF$x))
DF
  x           y
1 1  0.10610802
2 1  1.71933883
3 2  0.01788855
4 2  0.83659415
5 2  0.43162867
6 3  0.68937628
7 4 -1.47557905
8 4 -0.24103146
9 4  0.14286818

答案 1 :(得分:1)

我愿意:

articles <- c(237, 278, 354, 600)
DF <- data.frame(x=c(237, 237, 278, 278, 278, 354, 600, 600, 600),
         y=rnorm(9))
DF$x <- match(DF$x, articles)

因为在这种情况下,ind只是匹配时获得的值。