【问题标题】:Data from rows aggregated by ID with results transposed in r来自按 ID 聚合的行中的数据,结果在 r 中转置
【发布时间】:2018-06-25 19:05:16
【问题描述】:

我有按每个参数排列成行的环境数据,我希望每个采样事件有一行以便分析它。

看起来像(实际上有大约 20 种参数类型和近一百万行)

ID  Location Parameter  Result
a1  x1       DO         7.3      
a1  x1       pH         8.1 
a1  x1       Salinity   32.7 
b2  x2       DO         7.6      
b2  x2       pH         8.3 
b2  x2       Salinity   31.2

我希望它看起来像

ID   Location  DO   pH    Salinity
a1   x1        7.3  8.1   32.7      
b2   x2        7.6  8.3   31.2

但是,在每次实地考察中,我们也会在不同深度测量某些参数。我正在研究如何从概念上处理数据的这方面,但显然如果不能很好地可视化它,就很难了解分析的重要性。有连续的深度测量值(例如,0.112、0.527、1.244、5.891 表示收集到的米数)和我可以排序的深度代码(例如,表面、半米、米、底部)。我认为只接受代码就可以了,特别是因为底部深度实际上是它自己的行作为参数,这是唯一应该真正改变的行。

我看到我的选项 1) 接受某些数据不会在同一行中,并且(我相信)无法在 ArcGIS 中一起分析,这是我清理后大部分数据的最终目标程序(不同的参数仅在特定深度测量的类型)。如果我这样做,我可能只是将底部代码添加到唯一 ID,该 ID 当前是站点加日期的文本字符串。或 2) 以某种方式对新列进行编码,可能将深度代码与参数名称组合在一起。因此,对于位置 a1 采样事件 xxxx,我将有一行可能具有盐度 S、盐度M、盐度 B、pHS、pHM、pHB 和 DO 的结果。希望我能清楚地概念化这一点,但非常欢迎提出建议。

此外,每个参数都有一个时间戳。它们都在一个可以忽略不计的窗口内,所以我想为每个采样 ID 保留第一个。例如 11:37 的盐度和 11:38 的 pH 值,输出行仅显示采样 ID 为 11:37。

任何建议都将不胜感激,因为我一直在努力寻找一种有效的方法来分析这个庞大的数据集,这些数据集的组织方式与我的首选格式相去甚远。

【问题讨论】:

    标签: arrays r concatenation


    【解决方案1】:

    spread 来自tidyr

    library(tidyr)
    
    spread(df, Parameter, Result)
    

    返回:

      ID Location  DO  pH Salinity
    1 a1       x1 7.3 8.1     32.7
    2 b2       x2 7.6 8.3     31.2
    

    【讨论】:

    • 感谢您的回复。这是一个好的开始,但距离我所希望的还很远。我一直在研究 tidyr 和 dplyr,但它们对我来说都是新的。我将开始尝试更多地使用传播,但基本上这解决了我将参数名称作为列名并填充一些结果的问题,而不是在 ID 中组合。这段代码以某种方式选择组合一些,但主要是在所有空白处都有很多 NA,每次站点访问仍然有一堆行。你知道如何通过ID选择来很好地组合这些吗?
    • 如果您可以使用dput 和您想要的输出(就像您已经完成但包括您面临的 NA 问题一样)提供一个最小的、可重现的数据集示例,这将有所帮助。
    猜你喜欢
    • 2014-05-03
    • 2016-08-28
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    相关资源
    最近更新 更多