我正在寻找一种在 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/