植物性状数据用于量化植物对环境因素的反应,可作为生态系统功能的指标。测量的性状值受到遗传、权衡、竞争、环境条件和物候的影响。这些相互作用对不同类群性状的影响特征并不明显,而且许多性状的测量规程也没有标准化。因此,有关生长和测量条件的辅助信息变化很大,需要灵活的数据结构。2007年,TRY计划作为植物性状数据的集成数据库成立,其中包括与理解和解释性状值相关的辅助属性。TRY数据库目前整合了约700个原始数据集和集体数据集,已成为植物性状数据的核心资源。这些数据以通用的长表(long-table)格式提供,其中的唯一标识符将不同的性状记录和对同一实体测量的辅助数据联系起来。由于TRY数据库发布的性状记录、植物分类群以及性状和辅助数据类型众多,数据预处理是必要的,但并不简单。在此,我们介绍专门用于支持植物性状数据探索和过滤的R软件包“rtry”。通过集成预处理所必需的现有R函数子集,“rtry”避免了用户浏览广泛的R生态系统的需要,并以一致的语法提供这些函数。值得注意的是,“rtry”并不支持数据检索或分析,而是专注于优化数据质量的预处理任务。虽然“rtry”主要针对TRY数据,但其实用性也扩展到其他来源的数据,如国家生态观测网络(NEON)。“rtry”软件包可在Comprehensive R Archive Network(CRAN;https://cran.r-project.org/package=rtry)和GitHub Wiki(https://github.com/MPI-BGC-Functional-Biogeography/rtry/wiki)上找到,同时还有全面的文档和描述详细数据预处理工作流程的vignettes。性状被描述为实体的数量(Entity-Quality Model),植物性状被定义为可在植物个体水平上测量的植物形态、解剖、生理、生化和物候特征。性状反映了进化、遗传和群落组合过程对非生物和生物环境限制的反应结果,并决定了个体如何表现和应对环境因素。因此,性状提供了从物种丰富性到功能多样性的联系,而功能多样性影响生态系统的属性及其对人类的影响。为了防止生物多样性的丧失和生态系统的退化,研究越来越注重植物性状的收集和分析,例如,美国国家科学基金会的国家生态观测网络(NSF's NEON;https://www.neonscience.org)和澳大利亚陆地生态系统观测站(Terrestrial Ecosystem Research
Network;https://www.tern.org.au)已将植物性状选为关键观测指标。由于可用性的提高,植物性状现在已将地球观测的范围扩展到单个生物的水平,在全球快速变化的背景下提供了从生物多样性到生态系统功能和建模的联系。2007年,TRY计划(https://www.try-db.org)启动,旨在开发一个全球植物性状数据库,以支持生物多样性研究、功能生物地理学和植被动态建模。TRY数据库计划得到了生态学界的大力支持,他们贡献了许多原始数据集和集体数据集,并促成了多次更新。当前版本的TRY数据库(第6版)于2022年10月发布,以696个数据集为基础,包含1,540万条性状记录,以及4,300万条辅助数据记录,涉及2,661个性状和305,000个植物分类群,主要是物种水平。约670万条性状记录来自全球约48,000个测量点(图1)。2015年,部分TRY数据集开始公开,自2019年起,这些数据默认以知识共享(CC)-BY许可方式开放访问。截至目前,TRY计划已满足了30,000多项数据请求(图1),发布了超过45亿条性状记录和400亿条辅助数据记录。因此,TRY数据库已成为生态社区的核心资源,全球各地的用户可根据选定的性状和物种检索植物性状数据,或通过TRY网站上的数据门户申请单个数据集。关于如何从TRY数据库注册和申请数据的分步说明,请访问GitHub Wiki的“rtry”:https://github.com/MPI-BGC-Functional-Biogeography/rtry/wiki/The-TRY-database#request_rtry_data。图 1 (左)数据集和出版物(左轴)以及数据请求(右轴)的累积数量;灰色竖条表示数据贡献请求,橙色竖条表示 TRY 向公众开放的日期。(右)Mollweide投影法TRY第6版中测量点(蓝色点)的地理覆盖范围。通过数据申请流程,用户可以浏览数据库的知识产权指南,查看所申请性状和物种的描述,并在发出请求之前确定性状测量的数量。一旦申请获得批准,用户就可以随时从门户网站检索数据集。每份数据申请(https://www.try-db.org/TryWeb/TRY_Data_Release_Notes.pdf)都附有数据发布说明,介绍申请数据集的概况、数据结构、列标题(表 1)以及一些广泛使用的辅助数据的标识符(“DataID”)。此外,用户还可在 TRY 数据浏览器(https://www.try-db.org/de/de.php)上查阅性状(“TraitName”和“TraitID”)和物种(“AccSpeciesName”和“AccSpeciesID”)的描述和相应标识符。这些信息(尤其是标识符)对于数据预处理工作非常宝贵。植物性状提供了有关植物生长策略和受遗传特征制约的环境适应性的重要信息。因此,个体性状值可由多种相互作用的因素加以解释:系统发育背景下的宏观遗传学(即进化适应)、微观遗传学(即选择)、性状与性状的相关性、竞争以及原产地(即个体发育)、生长期间和当时的非生物和生物环境条件。并非所有这些依赖关系都得到了很好的研究,而且对于大多数类群来说,它们对性状的交互影响还没有得到很好的描述。由于这些原因,最有用的性状数据包括描述条件的辅助数据,即植物生长和性状测量的条件。因此,表示性状数据的数据结构必须包括相关的依赖关系,并允许使用不同类型的辅助数据。TRY数据发布的结构基于可扩展观测本体(OBOE)模式,以通用实体-属性-值模型(entity-attribute-value model)实现。TRY数据库采用长表结构,包含27列性状记录和辅助数据(第6版;表1)。对同一实体测量的不同性状记录和辅助数据通过唯一标识符(“ObservationID”;图2)进行链接。TRY数据发布说明(https://www.try-db.org/TryWeb/TRY_Data_Release_Notes.pdf)随TRY数据库的每个版本一起发布,提供了有关该数据结构的更详细概述。由于TRY数据库的规模庞大,有1,540万条性状记录和4,300万条辅助数据,因此发布的数据可能包含多达5,800万行性状记录和辅助数据。此外,已发布数据集中的不同属性与性状数据筛选有关,即性状名称、物种名称、辅助数据、单位以及重复和异常值的标识符。因此,为进一步分析获取所有相关信息并舍弃所有不一致数据的过程并不简单,而且很有可能并不是所有为数据选择提供的信息都被用于优化下游分析的数据质量。图2 (上图)在二维(2D)表格中直观地实现OBOE模式,观察结果在行中,性状和辅助数据在列中。(下图)演示TRY数据发布中使用的长表格式。以顶部面板中的第二个观测值(行)为例。数据发布提供了每条数据记录(“ObsDataID”)和观测数据(“ObservationID”)的唯一标识符、实体分类群以及性状记录和辅助数据的标识符、名称、值和单位。“TraitID”空格表示该条目为辅助数据。为清晰起见,与TRY数据发布版相比,列数有所减少。本文概述了“rtry”软件包,并从用户角度展示了它的实用性,强调了它作为研究人员处理复杂的植物性状数据预处理工作的宝贵资源的潜力。通过促进更高效、更可靠的数据预处理任务,“rtry”旨在提高植物性状数据集的质量,从而促进科学研究。为了帮助用户准备潜在的庞大而复杂的植物性状数据以进行进一步分析,耶拿马克斯-普朗克生物地球化学研究所的功能生物地理学小组(Functional Biogeography group at the Max-Planck-Institute for
Biogeochemistry in Jena)于2022年发布了“rtry”软件包(使用R 4.0开发)。稳定版可通过CRAN(https://cran.r-project.org/package=rtry)获取,开发版可在GitHub存储库(https://github.com/MPI-BGC-Functional-Biogeography/rtry/wiki)获取,以促进透明度、协作和持续改进。在使用“rtry”软件包之前,用户必须安装该软件包并将其加载到R环境中。安装过程会自动安装所有必需的依赖项。下面是从CRAN和GitHub安装和加载“rtry”软件包的命令:
install.packages('rtry')
library(devtools)
devtools::install_github("MPI-BGC-Functional-Biogeography/rtry")
library(rtry)
“rtry”软件包提供了一套用于数据预处理的函数,重点是数据挖掘、选择和删除,适用于不同层次的用户——从R和植物性状数据的初学者到专家。利用TRY发布的数据的长表结构及其附带功能(包括统一的物种名称(见数据发布说明;https://www.try-db.org/TryWeb/TRY_Data_Release_Notes.pdf)、统一的性状和辅助数据名称、标准化单位以及重复和异常值指标),该软件包旨在为研究人员提供方便易用的功能,以简化从开始到结束的基本数据预处理工作流程。为了实现这一目标,“rtry”采用了R软件包“data.table”、“dplyr”、“tidyr”和“utils”中的强大功能,将功能命令无缝整合到一个简洁的软件包中。通过将现有R函数的一个子集集成到一个一致的语法中,“rtry”确保了其所有函数的兼容性和一致性,使不同技能水平的用户都能执行所有必要的预处理程序,而无需浏览广泛的R软件包生态系统或掌握各种软件包语法。对于有经验的R用户,“rtry”还配有全面的文档,为高级预处理任务提供参考。文档和功能说明是“rtry” CRAN软件包的一部分,在“rtry” GitHub上提供,也可以通过R命令以软件包vignettes的形式获取:
help(package='rtry')
vignette(package='rtry')
vignette('rtry-introduction')
为避免与现有R函数发生潜在冲突,“rtry”软件包采用了一种命名惯例,即每个函数都以前缀“rtry_”开头,然后是对具体函数功能的描述。每个函数旨在执行植物性状数据准备中常用的一项特定数据预处理任务。这种结构化的方法使用户能够精确高效地执行各种预处理任务。此外,为了保持不同使用情况下的可行性,函数是分开的,也就是说,用户可以根据自己的需要使用多个函数的序列(图3和图5)。1.1版的“rtry”软件包包含16个函数(表2),可分为六个数据预处理步骤:(1)数据集导入,(2)数据集探索,(3)数据组合,(4)数据过滤,(5)长表到宽表转换,(6)数据集导出,以及地理编码和反向地理编码附加功能。用户可以直接在R环境中访问各个功能的说明:图3 使用“rtry”对TRY数据集进行预处理的一般工作流程概览考虑到植物性状数据预处理的复杂性,“rtry”为大多数函数提供了一个可选参数“showOverview”。这个可选参数可在每个预处理步骤后为用户提供汇总的数据集概览(即维度和/或列名称),以提高“rtry”软件包的可用性和清晰度。默认情况下,“showOverview”预设为“TRUE”,这意味着即使用户没有明确指定该参数,数据集概览也会作为函数输出的一部分显示出来。当“showOverview”设置为“FALSE”时,概览显示将被抑制,用户可以简化输出,只关注相关的预处理信息和任务。“rtry”的功能包括导入和探索数据、使用用户定义的标准处理数据以及最后导出预处理后的数据,可根据用户的具体需求无缝地进行数据预处理。我们概述了基于“rtry”功能的植物性状数据预处理一般工作流程,以帮助用户理解和应用软件包的功能(图3)。详细的工作流程可以在CRAN和GitHub维基上的软件包vignette中找到。本节将结合表2中提供的通用数据预处理步骤,解释该工作流程的各个要素以及相关的“rtry”函数。数据预处理工作流程的第一步总是将数据集导入R环境。“rtry_import”函数接受五个参数——“input”,“separator”,“encoding”,“quot”和“showOverview”。默认情况下,该函数导入从TRY数据库导出的制表符分隔文本文件(.txt)。不过,用户可以修改分隔符和编码的参数,以适应各种文件格式,如逗号分隔值(.csv)。# import dataset released from TRY (.txt)
TRYdata <- rtry_import(<path_to_TRY_txt>)
data <- rtry_import(<path_to_csv>,separator=',',encoding='UTF-8',quote='\"',showOverview=FALSE)
“rtry”软件包包含两个从TRY数据库请求的小型数据集(“data_TRY_15160”和“data_TRY_15161”)。为了熟悉数据结构,用户可以直接在RStudio的电子表格式数据查看器中查看它们,并按“ObservationID”排序。对于“ObservationID”94068,有两个“ObsDataID”1021243和1021245,前者属于“TraitID”3115,后者属于辅助数据。深入查看“DataID”和“DataName”,用户可以发现这些数据“SLA: petiole excluded”是在“growth chambers”中测量的,根据研究问题的不同,以后可能会被剔除。对于“ObservationID”158137,用户可以看到“DataID”59、60、61和413的辅助数据。进一步查看数据“SLA: petiole excluded”的“ErrorRisk”,大约为2.5,这意味着观测值与平均值相差2.5个标准差。这可能是用户以后希望保留的一个“good”值。此外,“OrigObsDataID”为“NA”,这意味着该观测值不是重复的。此外,“植物发育状况”(“DataID”413)也可能是进一步处理的重要信息。然而,对于较大的数据集来说,这是不可能做到的,这就导致了下一个数据预处理步骤——数据集探索。数据预处理工作流程的第二步是探索数据集。尽管TRY数据发布说明(https://www.try-db.org/TryWeb/TRY_Data_Release_Notes.pdf)提供了所需数据集的数据结构和列标题(表1)概览,但其中并不包括性状记录和辅助数据的信息内容,这给预处理工作带来了挑战。通过“rtry_explore”功能对数据集进行探索,用户可以深入了解内在性状、物种和辅助数据,从而在预处理过程中做出明智的决策并对结果进行评估。建议在每个数据组合或过滤步骤前后主动探索数据集。这种做法可促进数据完整性,并有助于防止意外排除有价值的数据。“rtry_explore”函数接收四个参数——“input”、“...”、“sortBy”和“showOverview”——并根据指定的列名(“...”)将输入整理成分组数据表。每组中还有一列显示总计数,作为探索的附加信息。默认情况下,如果未指定“sortBy”,输出将按第一个属性分组。下面的“rtry_explore”函数实现将根据用户的偏好探索导入数据集(“TRYdata”)中的性状和辅助数据,并根据“TraitID”对结果进行排序。探索结果输出(“TRYdata_explore”)会显示所有性状,然后是辅助数据(由“AccSpeciesID”和“AccSpeciesName”中的缺失值“NA”标识)。探索的主要目的是获得性状、辅助数据和子性状(在相同的“TraitID”下用不同的“DataID”表示)的概览,以便进行数据筛选。
TRYdata_explore <- rtry_explore(TRYdata,
DataID, DataName, TraitID, TraitName,
sortBy=TraitID,
showOverview=FALSE)
通过在参数“...”中加入列标题“AccSpeciesID”和/或“AccSpeciesName”,也可以使用数据探索来获取可用数据的物种信息。但是用户应该注意,由于数据集可能多种多样,同时探索物种、性状和子性状可能会导致结果列表过长。由于植物性状数据来源多样,用户在预处理过程中经常需要管理多个数据集。为此,“rtry”提供了四个数据组合函数,即“rtry_bind_col()”、“rtry_bind_row()”、“rtry_join_left()”和“rtry_join_outer()”。这些函数的可视化解释如图4所示。图4 对“rtry”提供的四个数据组合函数的可视化解释“rtry_bind_col”和“rtry_bind_row”函数使用数据框列表(‘...’),使用户可以按列或按行组合数据框。由于这两个函数不考虑共同属性,因此用户在绑定前必须分别确保列和行的正确排序。# combine multiple TRY datasets (TRYdata1, TRYdata2, TRYdata3) already imported into R by row
TRYdata_combine <- rtry_bind_row(TRYdata1, TRYdata2, TRYdata3)
相比之下,“rtry_join_left”和“rtry_join_outer”函数根据一个共同属性(“baseOn”)合并两个数据杠(“x”和“y”)。“rtry_join_left”函数返回左侧数据(“x”)和右侧数据框(“y”)中匹配的记录,而“rtry_join_outer”函数返回两个数据框(“x”和“y”)中的所有记录。
TRYdata_georef <- rtry_join_left(TRYdata, georef,baseOn=ObservationID,showOverview=FALSE)
georef <- rtry_join_outer(coor, loc, baseOn=ObservationID)
数据预处理的一个主要目标是数据过滤。这一功能对于从TRY数据库检索到的数据集尤为重要,因为这些数据集所包含的信息往往多于用户目标所需的信息,以及与计划分析不一致的性状数据。为了避免在下游分析中加入大量数据过滤(这是可能的,但容易出错并降低计算效率),必须事先提取(选择)相关信息或删除(排除)无关信息。“rtry”提供了六种功能来促进这种数据过滤过程:“rtry_select_col()”、“rtry_remove_col()”、“rtry_select_row()”、“rtry_exclude()”、“rtry_select_anc()”和“rtry_remove_dup()”。在TRY第6版中,输出表有27列(表1),包括性状或辅助数据测量值以及识别数据贡献者和贡献数据集的信息内容。要从导入的数据集中只选择相关列,用户可以使用“rtry_select_col”或“rtry_remove_col”函数。这两个函数接受三个参数——导入的数据框('input')、要选择或删除的列名列表('...')和'showOverview'。“rtry_select_col()”允许用户明确选择要保留的列列表,而“rtry_remove_col()”则删除指定的列。一般来说,使用“rtry_remove_col”函数只移除数据框的一小部分会更方便。需要注意的是,不应该删除TRY数据集中包含每个观测值的唯一标识符(“ObservationID”)和重复性状记录的唯一标识符(“OrigObsDataID”)的列,以确保后期预处理步骤(如数据选择和重复删除)的正常功能。
TRYdata_simplified <- rtry_remove_col(TRYdata,LastName, FirstName,DatasetID, Dataset, Reference, Comment)
通过“rtry_select_row”和“rtry_exclude”函数,用户可以根据记录(行)的相关性或一致性选择或排除记录(行),以便进一步分析。虽然TRY数据库在数据资源管理器(https://www.try-db.org/de/de.php)上提供了性状名称和相应的标识符,但并没有提供子性状或辅助数据的完整列表。因此,必须事先使用“rtry_explore()”(第3.2节)进行数据探索,以获取数据集中的信息内容,如性状、子性状和辅助数据。“rtry_select_row”函数接受五个参数——数据框(“input”)、选择标准(“...”)和三个可选参数“getAncillary”、“rmDuplicates”和“showOverview”。该函数从数据框(“input”)中保留符合指定条件('...')的行。通过将参数“getAncillary”设置为“TRUE”,用户可以保留所有辅助数据,这些数据与保留行TRY中每个观测值的唯一标识符(“ObservationID”)相同。此外,用户还可以将“rmDuplicates”设置为“TRUE”,调用本节后面将介绍的“rtry_remove_dup”函数来删除数据集中的重复数据。在“rtry”中的所有函数中,“rtry_exclude()”被认为是预处理植物性状数据时最有价值的函数,因为它提供了灵活的参数来过滤性状测量数据和相应的辅助数据。“rtry_exclude”函数接受四个参数——数据框(“input”)、排除标准(“...”)、排除所依据的属性(“baseOn”)以及可选参数“showOverview”。该函数根据指定的标准(“...”)从数据框(“input”)中删除数据。用户需要明确地将参数“baseOn”设置为他们认为合适的标识符。例如,当参数“ObservationID”被设置为“rtry_exclude()”时,如果数据框中的任何记录满足指定的排除标准,“rtry_exclude()”就会删除相应实体(用相同的“ObservationID”表示)的所有记录。因此,如果将“baseOn”设置为综合物种名称的唯一标识符(“AccSpeciesID”),那么如果该物种的任何一条记录满足该标准,则相应物种的所有记录都将被排除。或者,当“baseOn”设置为“ObsDataID”(TRY数据集中每条记录或每行的唯一标识符)时,函数将只排除满足指定标准的记录。下面是数据选择和排除的三个示例。详细解释和实现可以在软件包vignettes、CRAN和GitHub Wiki中找到。本例仅从复杂植物性状数据集中选择与进一步分析相关的数据。用户可以先浏览数据集,获得数据集中可用性状和辅助数据的概览,然后确定选择相关性状记录和辅助数据进行进一步预处理和分析的标准。
TRYdata_explore <- rtry_explore(TRYdata,DataID, DataName, TraitID, TraitName,sortBy=TraitID)
TRYdata_select <- rtry_select_row(TRYdata,TraitID %in% c(3115, 3116,3117) | DataID %in% c(59, 60, 61, 6601, 327, 413, 1961,113))
此示例删除了所有非成熟植物的观测数据,但保留了成熟植物的测量数据。通过例1中的数据集探索,用户了解到“DataID” 413提供了有关植物发育状况或成熟度的信息。在这里,“DataID” 413被用来执行另一个数据集探索,获得的植物成熟度值(“OrigValueStr”)被用来确定过滤标准。虽然“rtry_exclude()”会删除从非成熟植物上测量的整个观测值的所有记录,但值得注意的是,本示例还保留了发育状态明确未知或未提供的观测值(给定观测值没有“DataID” 413),并假设测量遵循了推荐的测量协议——测量成熟植物的性状。
TRYdata_subset <- rtry_select_row(TRYdata, DataID %in% 413)
TRYdata_subset <- rtry_explore(TRYdata_subset,DataID, DataName, OrigValueStr, OrigUnitStr,sortBy=OrigValueStr)
TRYdata_exclude <- rtry_exclude(TRYdata,(DataID %in% 413) & (OrigValueStr %in% c("juvenile", "saplings")),baseOn=ObservationID)
要清除TRY数据库数据整合过程中发现的异常值,用户可以利用数据库发布的数据中提供的“ErrorRisk”列。“ErrorRisk”以标准偏差的形式量化了性状记录与种、属或科水平上各自平均值的最大距离(a modified z-transformation)。在对数据集进行潜在异常值检测后,本示例过滤了“ErrorRisk”大于或等于3.0的数据。请注意,这次的参数“baseOn”设置为“ObsDataID”,因为我们只想排除单个性状记录的异常值,而保留可能有其他相关性状测量或辅助信息的其他观测值。
TRYdata_explore <- rtry_explore(TRYdata,DataID, DataName, TraitID, TraitName,ErrorRisk,sortBy=ErrorRisk)
TRYdata_exclude <- rtry_exclude(TRYdata,ErrorRisk >=3,baseOn=ObsDataID)
截至2022年10月,TRY数据库由来自1,108个数据贡献者的696个数据集组成。为了追踪潜在的重复条目,当相同的性状记录很有可能之前已被贡献给TRY时,就会分配一个唯一标识符“OrigObsDataID”。这一判断基于以下标准(1)相同的“TraitName”、“AccSpeciesName”和“UnitName”;(2)相似的“StdValue”考虑到四舍五入的影响;(3)地理坐标没有不同,这是用标准化的经纬度来评估的。在“rtry”中,我们提供了“rtry_remove_dup”函数,用户可以根据标识符“OrigObsDataID”轻松删除数据框(“input”)中的重复数据。虽然可以通过将“showOverview”设置为“FALSE”来抑制生成数据框的维度,但仍会显示移除的重复数据的数量。用户应注意,如果未向TRY申请原始而非重复的性状记录(例如,如果只向TRY申请了公共数据或特定数据集,而原始性状记录是受限数据或其他数据集的一部分),则TRY识别出的重复记录仍会被该函数移除,从而导致数据丢失。
TRYdata_rm_dup <- rtry_remove_dup(TRYdata)
性状数据集的结构可以是长表格式,也可以是宽表格式。TRY发布的数据采用长表格式,由于不同的性状或辅助数据被分隔存储在不同的行中(即,只需在需要时添加或删除行,而无需为缺失的信息设置空列),因此结构保持一致。长表格式能以更密集的格式保存这类数据,数据存储也更灵活。然而,宽表格式通常更便于分析,因为表格视图更易于直观解释和评估。因此,“rtry”软件包提供了“rtry_trans_wider”函数,用于将预处理后的性状数据从长表格式转换为宽表格式,以便进一步分析。该函数接受五个参数——数据框(“input”)、用于获取输出列名和值的列(“names_from”和“values_from”)、用于定义必要时应用于输出值的函数的可选参数(“values_fn”),以及是否显示生成的宽表的维度(“showOverview”)。在对TRY数据集进行长表到宽表的转换之前,有几个预处理步骤是必要的。第一步是只选择具有数值和相关列的性状(否则“values_fn”中的属性可能会导致错误)。接下来,用户可以根据需要从原始数据集中获取相关的辅助数据列表,例如,分别由“DataID” 59和60表示的纬度和经度等地理参照信息。“rtry”软件包提供了“rtry_select_anc”函数来简化这一步骤。“rtry_select_anc”函数接收三个参数——一个导入的数据框(“input”)、一个待选辅助数据的“DataID”列表(“...”)和一个可选参数“showOverview”。该函数将返回一个唯一的“ObservationID”列表和相应的相关辅助数据。提取辅助数据(本例中为经度和纬度)后,可使用“rtry_join_left()”将其与数值性状合并,以便在生成的宽表中包含辅助数据。一旦数据准备就绪,就可以使用“rtry_trans_wider”函数进行转换,如下所示。在处理一个“ObservationID”下可能存在的单个性状的多条记录时(例如,一个观测实体的多个比叶面积测量值),为确保转换成功,我们建议用平均值(“mean”)或最大值(“max”)或最小值(“min”)来定义参数“values_fn”。如果未指定该参数,同一“OberservationID”下不同“DataID”的性状记录(相同“TraitID”)将在同一单元格中显示为文本,从而导致数值数据分析出错。
num_traits <- rtry_select_row(TRYdata,complete.cases(TraitID) & complete.cases(StdValue))
num_traits <- rtry_select_col(num_traits,ObservationID,AccSpeciesID, AccSpeciesName, TraitID, TraitName,StdValue, UnitName,showOverview=FALSE)
georef <- rtry_select_anc(TRYdata,59, 60,showOverview=FALSE)
num_traits_georef <- rtry_join_left(num_traits, georef, baseOn=ObservationID)
num_traits_georef_wider <- rtry_trans_wider(num_traits_georef,names_from=c(TraitID,TraitName, UnitName),values_from=c(StdValue),values_fn=list(StdValue=mean))
“rtry_export”函数可用于将预处理数据的最终结构(长表或宽表格式)以逗号分隔值的形式保存到指定目录下的.csv文件中。该函数接收四个参数——要保存的数据('data')、输出路径('output')和两个可选参数,默认情况下,在任何字符或因子列周围插入双引号('quote'),并将文件设置为“UTF-8”编码('encoding')。
rtry_export(TRYdata,file.path(tempdir(), "TRYdata_preprocessed.csv"))
虽然TRY数据库是植物性状数据的核心资源,但研究人员通常会从不同来源获取数据以丰富分析内容。基于“rtry”在植物性状数据预处理方面的基础功能,我们提供了其他工作流程示例,其中包括地理编码和反向地理编码程序,以及将“rtry”应用于从TRY数据库以外的来源获取的数据。详细的(逆向)地理编码示例工作流程可在CRAN上的软件包vignette中找到,而“rtry” GitHub Wiki则提供了地理编码的vignettes和NEON植物性状数据的预处理工作流程。地理配准对于评估位置信息的可信度、使用通用坐标系过滤数据、估算地理模式、与地理配准数据(如环境数据)建立联系以及解决植物性状数据的空间自相关性问题都是必要的。在“rtry”中有两个函数可以帮助用户对WGS84坐标系中的地点或坐标列表进行地理编码(“rtry_geocoding()”为给定的地点名称导出经纬度)和反向地理编码(“rtry_revgeocoding()”根据提供的经纬度导出地点名称)。这些函数依赖于Nominatim,这是一个OpenStreetMap(OSM)数据搜索引擎。OSM提供的数据可免费用于任何目的,包括商业用途,并受开放数据库许可证(ODbL;https://wiki.osmfoundation.org/wiki/Licence)的约束。用户应注意,在使用OSM服务时,根据Nominatim使用政策(详情请访问:https://operations.osmfoundation.org/policies/nominatim/),每秒最多只能有一个请求(不能大量使用),并需要一个有效的电子邮件地址来识别请求。虽然示例工作流程提供了从相应信息列表中获取坐标或位置的脚本,但这两个函数也可应用于单个条目——“rtry_geocoding()”需要地址字符串('address'),“rtry_revgeocoding()”需要包含经纬度的数据框('lat_lon')。
rtry_geocoding("Hans-Knoell-Strasse 10, 07745 Jena, Germany",email="john.doe@example.com")
rtry_revgeocoding(data.frame(50.9101,11.56674),email="john.doe@example.com")
国家生态观测站网络(NEON)计划是由美国国家科学基金会(NSF)资助的一个研究平台,免费提供美国大陆和夏威夷各生物群落的关键生态指标的长期数据,作为发现和了解气候变化影响的基础。我们选择了NEON数据门户(NEON,2016)中的植物叶片性状数据集(产品编号:DP1.10026.001)来演示TRY植物性状数据之外的“rtry”软件包的使用案例。NEON植物叶片性状数据集包含单个(木本植物)或群落(草本植物)层面上阳光下树冠叶片的性状测量数据(单位面积叶片质量、叶片含水量、叶绿素、碳和氮浓度及稳定同位素、主要和次要元素以及木质素)。详细示例可从GitHub Wiki上获取,本节将概述使用“rtry”对NEON数据(图5)进行预处理的步骤。目的是展示“rtry”软件包在TRY数据库之外的多功能性,并说明用户如何将软件包中的各种功能无缝串联起来,以满足交叉和综合分析的需要。图5 使用“rtry”对NEON数据集进行预处理的一般工作流程概览下载NEON数据集后,用户会收到多个.csv文件,每个文件代表一个不同的数据表。每个数据表的相关信息可在用户指南(https://data.neonscience.org/data-products/DP1.10026.001#documentation)中找到。用户可使用“rtry_import”函数将NEON数据集导入R工作区。# for the list of NEON data within the NEON_output/stackedFiles directory
# read the .csv files and assign them to a corresponding variable
for (i in list.files(path=paste0(NEON_output,"/stackedFiles") -> ipath,pattern="vst|cfc")){assign(file_path_sans_ext(i),rtry_import(paste0(ipath,"/", i),separator=",",encoding="UTF-8",quote="\"",showOverview=FALSE))}
4.2.2 数据过滤和组合
与TRY数据类似,NEON植物性状数据也包含比数据预处理所需的更多信息。为演示起见,下面的脚本利用“rtry_select_col”函数获取与叶片样本野外采集相关的数据列(“cfc_fieldData”)、单个茎的位置信息(“vst_mappingandtagging”)和叶片样本的单位面积叶片质量(LMA)测量值(“cfc_LMA”)。
fieldData <-rtry_select_col(cfc_fieldData,individualID, sampleID,namedLocation, domainID, siteID, plotID,subplotID, geodeticDatum,decimalLatitude, decimalLongitude,elevation, sampleType,taxonID, scientificName, plantStatus)
mappingAndTagging <- rtry_select_col(vst_mappingandtagging,individualID, pointID,stemDistance, stemAzimuth)
lma <- rtry_select_col(cfc_LMA,sampleID, lmaSampleID,lmaSampleCode, dryMass, scannedLeafNumber,leafArea, leafMassPerArea,dryMassFraction)
接下来,使用“rtry_join_left”函数,利用NEON数据表中的唯一标识符“individualID”和“sampleID”,将映射和标记信息以及性状信息(如LMA)与野外数据合并。关于使用哪种标识符进行合并的信息,也可在NEON提供的用户指南中找到。值得注意的是,“vst_mappingandtagging”表中可能存在重复数据,这是因为某些个体偶尔会被重新映射以解决地理位置问题。为解决这一问题,在合并映射和标记信息时引入了“unique”函数。至此,用户已经获得了包含所有性状和地理参照信息的单一表格。然后,用户可以使用“rtry_explore”功能查看数据集,以确定排除观测值、非代表性数据或异常值的标准。可以使用“rtry_select_row”或“rtry_exclude”函数根据确定的标准来选择和排除任何观测值。强烈建议在每个过滤步骤后再次使用“rtry_explore”函数,以验证是否只删除了预期的不必要数据,以及是否保留了所有预期的有用数据。这种数据探索和过滤的迭代方法可以确保数据集的完整性和后续分析的可靠性。在此,我们提供两个预处理任务的示例。第一个示例是获取具有地理位置信息的数据,这些信息包括点位置的标识符(“pointID”)、茎到“pointID”位置的水平距离(“stemDistance”)以及茎和“pointID”位置之间相对于真北的方位角(“stemAzimuth”)。在NEON数据中,每条记录都有一个样地水平位置,这对于某些应用来说可能已经足够。要获得单个茎干的更精确位置,必须使用绘图和标记信息计算精确坐标。为此,用户可以首先使用“rtry_explore”功能评估有多少记录缺乏所需的绘图和标记信息。在数据探索过程中,除了计算单个茎干精确位置所需的三个地理位置列外,“siteID”列也用于更好地理解数据集。一旦确认存在缺失的地理位置信息,用户既可以使用“rtry_select_row()”只选择有地理位置信息的数据,也可以使用“rtry_exclude()”排除没有地理位置信息的数据。然后,使用数据探索来验证数据集——确保保留所有必要信息,删除所有不必要信息。
df_explore_before <- rtry_explore(fullTable,siteID, pointID,stemDistance, stemAzimuth,sortBy=pointID)
fullTable_geoloc<- rtry_select_row(fullTable,(!is.na(pointID) &!is.na(stemDistance) & !is.na(stemAzimuth)))
fullTable_geoloc <- rtry_exclude(fullTable,(is.na(pointID) |is.na(stemDistance) | is.na(stemAzimuth)),baseOn=sampleID)
df_explore_after <- rtry_explore(fullTable_geoloc,siteID, pointID,stemDistance, stemAzimuth,sortBy=pointID)
示例2:从健康个体中筛选数据
第二个示例涉及根据NEON植物性状数据集中的“plantStatus”列过滤数据集,以便只获取健康个体的数据。同样,使用“rtry_explore()”进行数据探索对于确定数据筛选的标准至关重要。这一次,探索的重点是“siteID”、“plotID”、“subplotID”、“scientificName”和“plantStatus”列,使用户能够深入了解不同植物的物理状态,以及物理状态在不同地点和物种之间的分布情况。按学名对探索结果进行排序可提高清晰度。通过查看探索结果,用户可以概览数据集中与每个物种相关的不同植物物理状态(如“OK”、“Disease damaged”和“Insect damaged”)。这些关键字可用于通过“rtry_select_row”和“rtry_exclude”功能过滤健康植物记录。建议在数据过滤后再进行一次数据检索,以确保所有受损个体都被成功移除,数据集中只保留健康个体。
df_explore_before <- rtry_explore(fullTable_geoloc,siteID, plotID, subplotID,scientificName, plantStatus,sortBy=scientificName)
fullTable_geoloc_healthy <- rtry_select_row(fullTable_geoloc,(plantStatus =="OK"))
fullTable_geoloc_healthy <- rtry_exclude(fullTable_geoloc,(plantStatus %in%c("Disease damaged", "Insect damaged")),baseOn=sampleID)
df_explore_after<- rtry_explore(fullTable_geoloc_healthy,siteID, plotID, subplotID,scientificName, plantStatus,sortBy=scientificName)
数据预处理完成后,可使用“rtry_export”函数将预处理后的NEON性状数据导出为逗号分隔值(.csv)文件。
output_file<-file.path(NEON_output, paste0(basename(NEON_output),".csv"))
rtry_export(fullTable_geoloc_healthy,output_file)
本文从用户角度介绍了开源R软件包“rtry”。通过提供数据预处理任务所必需的精选功能,“rtry”使各种技能水平的R和植物性状用户都能根据自己的需要有效地探索、过滤和重新格式化性状记录,而无需深入研究复杂的R软件包生态系统。各种平台上的软件包文档和示例工作流程简单易懂、内容全面,即使是不熟悉R或性状数据固有数据结构的用户也能轻松浏览和使用其功能,从而简化植物性状数据的预处理工作流程。我们展示了“rtry”在TRY数据库之外的多功能性,展示了它在预处理从NEON计划等其他平台获取的植物性状数据集方面的适用性。这说明了“rtry”在不同数据集上的适应性和实用性,加强了它在生态研究和数据分析中的作用。总之,“rtry”在植物性状数据预处理方面为研究人员提供了一个功能强大、用户友好的单一软件包解决方案。它的易用性、功能性和多样性使其成为研究人员挖掘植物性状数据集潜力的有用工具。
‘rtry’: An R package to support plant trait data
preprocessing
Ecology
and Evolution (IF = 2.3)Olee
Hoi Ying Lam*, Jens Kattge, Susanne Tautenhahn, Gerhard Boenisch, Kyle R.
Kovach, Philip A. Townsendhttps://doi.org/10.1002/ece3.11292文章翻译仅代表译者的理解,如需参考和引用相关内容,请查阅原文。