python - 在 SQL 中查找罗马数字的范围

标签 python sql r range average

我正在寻找一种在 SQL 语句中查找范围的方法。

我的数据是这样的

         COUNTRY PROTEIN  MG
1          China    42.8  II
2          China    42.3 III
3          China    41.9 III
4  United States    40.0  IV
5          China    43.2   I
6          China    42.5  IV
7          China    42.9 III
8          China    45.9  VI
9          Japan    42.3  VI
10 United States    40.9 III

我目前正在运行这样的语句,其中我获得了蛋白质值的平均值,但我不知道如何计算罗马数字的范围

select COUNTRY, avg(PROTEIN), MG from data group by COUNTRY

我希望我的输出看起来像这样(不正确的数字只是一个例子)

COUNTRY MEAN MG_RANGE
China 42.3 I-III
United States 45.2 I-VI

我将此文件作为 CSV 文件,因此我愿意接受 R 和 Python 中的替代方案,它们会给我相同的输出。它可以是数字,也可以是最简单的输出。

最佳答案

在 R 中,utils 包有一个非导出函数 .roman2numeric(),用于将字符罗马数字转换为它们各自的数值。我们可以将罗马数字转换为数字,然后聚合以找到一个国家/地区内的范围。

(dat$MG2 <- utils:::.roman2numeric(as.character(dat$MG))
#  2   3   3   4   1   4   3   6   6   3 
dat
#         COUNTRY PROTEIN  MG MG2
# 1         China    42.8  II   2
# 2         China    42.3 III   3
# 3         China    41.9 III   3
# 4  UnitedStates    40.0  IV   4
# 5         China    43.2   I   1
# 6         China    42.5  IV   4
# 7         China    42.9 III   3
# 8         China    45.9  VI   6
# 9         Japan    42.3  VI   6
# 10 UnitedStates    40.9 III   3

为了(任意)找到每个国家/地区的 MG2 范围,我们可以这样做

aggregate(MG2 ~ COUNTRY, dat, range)
#        COUNTRY MG2.1 MG2.2
# 1        China     1     6
# 2        Japan     6     6
# 3 UnitedStates     3     4

关于python - 在 SQL 中查找罗马数字的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26132217/

相关文章:

r - 在 xts 对象中将字符转换为数字

r - Excel 导入后清理混合小数分隔符(也许是 gsub?)

python - 将不同日志级别的消息过滤到不同的日志文件

python - 如何在图像上绘制矢量场?

python - Django DATETIME_FORMAT 特定日期不正确(一年)

SQL Update 如果 null 加 1 否则加 1 到当前值

asp.net - 在哪里可以获得用于 SQL Server 的简单时区表?

mysql - 从与其他项目共享相同描述的特定唯一 ID 返回总值(value)

Python scrapy管道错误

r - 在 R Shiny 中跨多个模块使用reactiveValues