for循环用于将帐户分配给R中的名称

时间:2017-02-01 14:15:09

标签: r loops for-loop while-loop

我正在尝试创建一个非常简单的for循环来更新数据帧。我不确定这是最佳做法还是有另一种方法可以做到这一点。我有一个名单和一个帐户列表,我正在尝试将每个帐户分配给具有最低值的名称。

这就是我所拥有的:

Person <- c("Jeff", "Cindy", "Matt", "Jessica")
TotalValue <- c(54, 46, 15, 13)
NAMES <- data.frame(Person, TotalValue)

Accounts <- c(paste0("acc",1:50))
AccountValues <- c(1:50)
ACCOUNTS <- data.frame(Accounts, AccountValues)

for (i in nrow(ACCOUNTS)){
  idx <- which.min(NAMES$TotalValue)
  NAMES$TotalValue[idx] <- NAMES$TotalValue[idx] + ACCOUNTS$AccountValues[i]
  ACCOUNTS$name[i] <- as.character(NAMES$Person[idx])
  }

起点:

Person   TotalValue
Jeff     54
Cindy    46
Matt     15
Jessica  13

Accounts   AccountValues   Person
Acc1       1
Acc2       2
Acc3       3
Acc4       4
Acc5       5

我正在尝试遍历50个帐户中的每个帐户,并从NAMES df中分配其中一个人。我希望它找到得分最低的人,并指定该名称。 Acc1将查看4个名称并查看Jessica的得分最低为13.然后使用Jessica的名称填充Acc1的Person列,并将AccountValue为1,从acc1,到Jessica的得分,使她的得分现在为14。然后它看着Acc2,再次找到Jessica,因为她的得分是14,仍然是最低的。再一次,它将Acc2 Person填充到Jessica。对于acc3,它会找到Matt,因为Jessica的分数现在是16(13 + 1 + 2),而Matt只有15分。然后它会在Acc3的Person栏中填充Matt的名字,并在他的分数上加3,给他18 ..等等。

我已将列表缩短为Acc1 - Acc5而不是50.这将是分配5个帐户后的结果。

预期结果:

Person   TotalValue
Jeff     54
Cindy    46
Matt     23
Jessica  20

Accounts   AccountValues   Person
Acc1       1               Jessica
Acc2       2               Jessica
Acc3       3               Matt
Acc4       4               Jessica
Acc5       5               Matt

谢谢!

0 个答案:

没有答案