基于R中的值迭代和赋值的函数

时间:2017-01-31 21:28:05

标签: r loops for-loop while-loop

我正在寻找一个函数,该函数遍历一个帐户列表,每个帐户都有一个关联的值,并为该帐户分配一个名称列表中的一个名称。名称列表将具有关联的值,我希望指定的名称是具有最小值的名称。

name    totalvalue
Jeff    54
Christy 43
Matt    29
Jessica 19


accounts   value   name
acc1       8
acc2       7
acc3       7
acc4       7
acc5       6
acc6       6
acc7       5
acc8       3

我想要的是遍历帐户列表并查看名称列表。首先查看acc1,将其分配给名称列表的min(totalvalue)。 acc1的名称变为Jessica,jessica的totalvalue由acc1值增加。 Jessica变成了27,然后acc2再次去Jessica制作Jessica 35,然后acc3找到现在是min的Matt,并相应地分配它等等。

到目前为止:

F <- function(listofnames, listofaccounts){
        for (account in listofaccounts){
            name <- min(listofnames$totalvalue)
            listofaccounts$name <- name
           }

我知道这有很多原因。我也在考虑做一个while循环..

F <- function(listofnames, listofaccounts){
        count <- 8
        while (count > 0){
           for (account in listofaccounts){
               name <- min(listofnames$totalvalue)
               listofaccounts$name <- name
               count <- count - 1 
           }
        }
     }

请帮忙!谢谢你:)

1 个答案:

答案 0 :(得分:1)

这不是超级快,但应该有效:

myfunc <-function(names, vals){
  for(i in 1:nrow(vals)){ #for each row
    idx <- which.min(names$totalvalue) #we find the index of the current min
    names$totalvalue[idx] <- names$totalvalue[idx] + vals$value[i] #add to the current min the current number
    vals$names[i] <- as.character(names$name[idx]) #add to the name list, the name of the current min
  }
  return(list(names, vals)) #return a list of the two outputs
}
myfunc(x,y)

[[1]]
     name totalvalue
1    Jeff         54
2 Christy         46
3    Matt         47
4 Jessica         47

[[2]]
  accounts value   names
1     acc1     8 Jessica
2     acc2     7 Jessica
3     acc3     7    Matt
4     acc4     7 Jessica
5     acc5     6    Matt
6     acc6     6 Jessica
7     acc7     5    Matt
8     acc8     3 Christy