【发布时间】:2021-05-21 00:08:10
【问题描述】:
我正在尝试查找已发送到 4 个或更多单独接收者(按名称)的所有发送者,其中发送给这些单独接收者的总金额超过 5000.00 美元,并寻找一种方法告诉 r 维护包含不同的名称,而不仅仅是一个。
例如,使用以下data.frame:
sender<-c("tom","tom","kevin","frank","tom","chris","tom","tom","craig","louis",
"john", "tom","brian","tom","George")
reciever<-c("ryan","dave","sarah","kel","eric","ben","wayne","mike","brenda","christina",
"brianna","hal","sam","ryan","van")
amount<-as.numeric(c("200","100","300","3000","100","350","100","90","670","865","600",
"300","1300","5200","200"))
dF<-data.frame(sender,reciever,amount)
使用 dpylr 应用以下参数:
dF1<-dF%>%
distinct(reciever,.keep_all = TRUE)%>%
group_by(sender)%>%
summarise(
count=n(),
total = sum(amount)
)%>%
filter(count >= 4 & total>5000)
您会注意到示例发送者向量中的目标是 tom。 tom 与 Ryan 有 2 笔交易,但是,由于 distinct 函数的性质,r 提取 ryan 对应的金额为 200 的第一列,并排除 ryan 的另一列,即 5200。这种排除提出了一个问题,因为排除的交易(如果包括)将满足过滤器中应用的 5000 美元阈值的逻辑。
有没有办法,使用 distinct 函数,告诉 r 保留所有涉及相似的不同名称的事件?或者,我应该从完全不同的角度来解决这个问题吗?
谢谢!
【问题讨论】:
-
作为后续,如果有更好的使用 SQL 的方法,请随时提供您建议的 SQL 代码,因为我可以将 sqldf 包加载到 r 中。感谢您的观看!
-
如果您还显示交叉检查的预期输出会更好