我正在尝试整理我掌握的有关恐龙及其年龄范围的大量数据。到目前为止,我的数据由一列名称组成,然后是两列过去数百万年的最大和最小日期,如下所示:
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 http://cran.r-project.org/web/packages/sqldf/index.html包裹。
library(sqldf)
假设您的 GENUS 数据位于genus数据框和阶段位于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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)