我正在寻找一个函数,该函数遍历一个帐户列表,每个帐户都有一个关联的值,并为该帐户分配一个名称列表中的一个名称。名称列表将具有关联的值,我希望指定的名称是具有最小值的名称。
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
}
}
}
请帮忙!谢谢你:)
答案 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