gpt4 book ai didi

r - 如何使用 R 中的范围数据显示离散类别中的频率?

转载 作者:行者123 更新时间:2023-12-04 20:05:17 25 4
gpt4 key购买 nike

我正在整理我掌握的关于恐龙及其年龄范围的大量数据。到目前为止,我的数据由一列名称组成,然后是两列过去数百万年的最大和最小日期,您可以在此处看到:

GENUS           ma_max  ma_min  ma_mid    
Abydosaurus 109 94.3 101.65
Achelousaurus 84.9 70.6 77.75
Acheroraptor 70.6 66.043 68.3215

地质时间分为不同的时代(如侏罗纪和白垩纪),这些时代又分割为阶段。这些阶段有特定的年龄范围,我制作了一个数据框来显示这些:

Stage          ma_max ma_min ma_mid
Hettangian 201.6 197.0 199.30
Sinemurian 197.0 190.0 193.50
Pliensbachian 190.0 183.0 186.50
Toarcian 183.0 176.0 179.50
Aalenian 176.0 172.0 174.00
Bajocian 172.0 168.0 170.00
Bathonian 168.0 165.0 166.50
Callovian 165.0 161.0 163.00
Oxfordian 161.0 156.0 158.50
Kimmeridgian 156.0 151.0 153.50
Tithonian 151.0 145.5 148.25
Berriasian 145.5 140.0 142.75
Valanginian 140.0 136.0 138.00
Hauterivian 136.0 130.0 133.00
Barremian 130.0 125.0 127.50
Aptian 125.0 112.0 118.50
Albian 112.0 99.6 105.80
Cenomanian 99.6 93.5 96.55
Turonian 93.5 89.3 91.40
Coniacian 89.3 85.8 87.55
Santonian 85.8 83.5 84.65
Campanian 83.5 70.6 77.05
Maastrichtian 70.6 66.5 68.05

我试图找出每个阶段有多少个属。问题是范围 - 例如,一个属可以有一个跨越 3 个或更多阶段的范围,我希望每个阶段都记录一个属的存在。有什么简单的方法可以做到这一点吗?我考虑过使用 lattice 包中的“shingle”,正如在此处类似讨论中所建议的那样,但我对 R 很陌生,不确定它是否可以以数据有范围的方式实现。

最佳答案

我会推荐 sqldf包。

library(sqldf)

假设您的 GENUS 数据位于 genus 数据框中,而 Stage 位于 stage 数据框中。

res <- sqldf("select count(*) as countDinos , s.Stage, GROUP_CONCAT(g.GENUS) as names from genus g,stage s where (g.ma_max>=s.ma_min AND g.ma_max<=s.ma_max)  OR  (g.ma_min>=s.ma_min AND g.ma_min<=s.ma_max) OR (g.ma_max>s.ma_max AND g.ma_min<s.ma_min)   group by s.Stage order by s.ma_mid DESC  ")

应该给你这样的回应:

countDinos  Stage         names
1 Albian Abydosaurus
1 Cenomanian Abydosaurus
1 Santonian Achelousaurus
2 Campanian Achelousaurus ,Acheroraptor
2 Maastrichtian Achelousaurus ,Acheroraptor

关于r - 如何使用 R 中的范围数据显示离散类别中的频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26950123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com