R:相当于“等级”和“分区”[关闭]

Posted

技术标签:

【中文标题】R:相当于“等级”和“分区”[关闭]【英文标题】:R: Equivalent of "rank" and "partition" [closed] 【发布时间】:2022-01-19 02:54:08 【问题描述】:

我正在使用 R 编程语言。我有以下 SQL 查询:

select b.var1 as var1, b.var2 from
(select *, rank() over( partition by var1 order by var3) as rank1
from my_table)b; 

这段 SQL 代码的目标是:

查找包含相同“var1”重复值的记录组 对于每个组,根据它们的“var3”值对这些记录进行排序 对于每组排序的重复记录,只保留“var3”值最大的记录 注意:包含“var1”非重复值的记录保持不变

我的问题:有谁知道是否可以在 R 中运行相同的代码?例如:

library(RODBC)
library(dbi)
library(odbc)
library(sqldf)
library(SQLite)

dbWriteTable(my_db_connection, SQL("   select b.var1 as var1, b.var2 from
    (select *, rank() over( partition by var1 order by var3) as rank1
    from my_table)b " ), results_of_this_query)

有谁知道是否可以在 R 中做到这一点? R 能识别“rank()”、“over”和“partition”等 SQL 命令吗?

谢谢!

【问题讨论】:

如果 my_table 是 R 中的数据框,则library(sqldf); sqldf("...") 将处理它,其中“...”是包含涉及 my_table 的 SQL 语句的字符串。默认情况下,它使用 SQLite 作为后端,但也支持其他 3 个后端。请注意r 标记页面顶部关于提问的信息,特别是问题应包括输入,此处为 my_table,并且应使用 dput 显示,以便其他人可以运行该语句。 【参考方案1】:

Tidyverse collection of packages 尤其是dplyr 可以轻松地为您在语法上像 SQL 上完成这项任务。

最终的代码应该是这样的

df %>%
group_by(var1) %>%
mutate(rank = dense_rank(var3))

我可能看不懂你的 SQL 字符串并做出了正确的翻译,因为 SQL 语言不是我的强项。

【讨论】:

@Gregory Oliveira:谢谢你的回答!是否可以将您的答案与 dbWriteTable() 命令一起使用?例如: dbWriteTable(my_db_connection, SQL(" df %>% group_by(var1) %>% mutate(rank = dense_rank(var3)) " ), results_of_this_query) ?谢谢! @stats555,我稍后再试。我需要用 SQL 回顾一些导入任务,然后我会为您提供代码。待会见!【参考方案2】:

在按分区和排序列排序后,考虑averank

df <- with(df, df[order(var1, var3),])

df$rank1 <- with(df, ave(var3, var1, FUN=rank))

为其他参数添加 lambda:

df$rank1 <- with(df, ave(var3, var1, FUN=function(x) rank(x, ties.method="first", na.last="keep")))

【讨论】:

@Parfait:谢谢你的回答!是否可以将您的答案与“dbWriteTable”命令一起使用?例如:dbWriteTable(my_db_connection, SQL(" with(df, ave(1:nrow(df), var2, FUN=function(x) rank(x, ties.method="first", na.last="keep" ))) "), results_of_this_query) ?谢谢! 嗯...为什么不直接运行SQL?

以上是关于R:相当于“等级”和“分区”[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Python中R数组的等价物[关闭]

Kubeadm搭建K8s v1.21.3

如何分配 sql 等级? [关闭]

电脑怎样关闭windows管理共享服务

计算平均值而不添加负等级退出循环[关闭]

linux(centos8): 临时关闭/永久关闭交换分区swap?