r - 使用l_ply将结果添加到现有数据框

时间:2015-08-25 16:22:05

标签: r plyr apply

l_ply还是其他一些类似应用的函数能够将结果插入现有数据框?

这是一个简单的例子......

假设我有以下数据框:

mydata <- data.frame(input1=1:3, input2=4:6, result1=NA, result2=NA)

  input1 input2 result1 result2
1      1      4      NA      NA
2      2      5      NA      NA
3      3      6      NA      NA

我想循环遍历行,执行操作,然后在result1result2列中插入答案。我试过了:

l_ply(1:nrow(mydata), function(i) {
  mydata[i,"result1"] <- mydata[i,"input1"] + mydata[i,"input2"]
  mydata[i,"result2"] <- mydata[i,"input1"] * mydata[i,"input2"]})

但我在结果列中使用NA's取回原始数据框。

P.S。我已经阅读了post,但它并没有完全回答我的问题。我有几个结果列,我想要执行的操作比上面的操作更复杂,所以我更喜欢分别计算列,然后将它们添加到数据帧之后该帖子表明。

2 个答案:

答案 0 :(得分:1)

我认为可能有一种普通方法,但在基地R中这似乎非常容易和明确:

> mydata[3:4] <- with(mydata, list( input1+input2, input1*input2) )
> mydata
  input1 input2 result1 result2
1      1      4       5       4
2      2      5       7      10
3      3      6       9      18

即使你得到了plyr代码来提供有用的东西,你仍然没有将结果分配给任何东西,所以它会在垃圾收集的耀眼阳光下蒸发掉。请注意,如果您遵循@Vlo的建议,您可能会在控制台上看到可能导致您认为“mydata”的结果。已更新,但“mydata”对象将保持不变。您需要将值分配回原始对象。对于dplyr操作,您通常会分配整个对象。

答案 1 :(得分:0)

您不需要使用 draw.probit <- function(xy, beta1,beta2,minv,maxv, mod,lwd,lty, add,from,to){ # Aufruf der Funktion f.probit zur Verbesserung der y-Werte #f <- f.probit(xy[,1],beta1=beta1,beta2=beta2,minv=minv,maxv=maxv) # Ersetzen der Y-Werte mit der Verbesserung #xy[,2] = f if (add){ # TODO: Falls add = TRUE, dann die Kurve im geöffneten Fenster hinzufügen selected_FUN <- function(x) { f.probit(x, beta1=beta1,beta2=beta2,minv=minv,maxv=maxv) } draw.data(xy, add, mod, selected_FUN) #curve(f.probit(x,beta1=beta1,beta2=beta2,minv=minv,maxv=maxv),add=T,mod=model,lwd=lwd,lty=lty) }else{ # TODO: Falls add = FALSE, dann die Kurve in ein neues Fenster hinzufügen selected_FUN <- function(x) { f.probit(x,beta1=beta1,beta2=beta2,minv=minv,maxv=maxv) } draw.data(xy, add, mod, select_FUN) #curve(f.probit(x,beta1=beta1,beta2=beta2,minv=minv,maxv=maxv),from=from,to=to,mod=model,lwd=lwd,lty=lty) } } 或其变体。相反,您可以利用apply向量化:

R
相关问题