【发布时间】:2017-06-23 19:12:13
【问题描述】:
希望通过遍历每个资源的名称来减少资源分配,并查看分配给该人姓名的帐户,随机选择一个并将该人的姓名替换为 NA。
可重现的例子:
Accts <- paste0("Acc", 1:200)
Value <- c(500, 2000, 5000, 1000)
AccountDF <- data.frame(Accts, Value)
AccountDF$Owner[1:200] <- NA
AccountDF$Owner[1:23] <- "Jeff"
AccountDF$Owner[24:37] <- "Alex"
AccountDF$Owner[38:61] <- "Steph"
AccountDF$Owner[62:111] <- "Matt"
AccountDF$Owner[112:141] <- "David"
library(dplyr)
OwnerDF <- AccountDF %>%
group_by(Owner) %>%
summarise(Count = n(),
TotalValue = sum(Value)) %>%
filter(!is.na(Owner))
到目前为止我在哪里:
for (p in 1:nrow(OwnerDF)){
while (AccountDF$Count[p] > 22){
AccountDF %>%
filter(Owner == OwnerDF$Owner[p]) %>%
sample_n(1)
}
}
我听说 for 循环是不必要的。我确信这可以通过 purr 包和 pmap 或类似的东西来完成。我仍然在学习。
我想遍历 OwnerDF 并查看该人是否“拥有”太多帐户。如果是,请查看原始帐户列表并随机选择一个并将所有者的姓名替换为 NA,从其计数中删除 1,然后继续。
最后,在弄清楚这一点之后,我想看看它是否可以在多个条件下完成。比如 While(Count > 22 & Value > $40,000),或者两个 while 循环。目标是将每个人的“拥有”账户减少到某个阈值以下,并将 $$ 减少到某个阈值以下。
【问题讨论】:
标签: r for-loop while-loop dplyr