【问题标题】:How to aggregate rows on a pair of columns, while handling other columns in specific ways?如何在一对列上聚合行,同时以特定方式处理其他列?
【发布时间】:2015-07-16 08:42:47
【问题描述】:

我一直在使用 R 中的聚合函数,但并没有真正解决我的问题。

问题如下,我的数据看起来像这样(请注意,还有几列,但与示例无关):

Description Delta   E.Mass  Charge  RT
TFGTFSVEEYVLPK  0.0111  1615.82 2   94.5554
VSGVGNNISFEEK   0.0073  1378.68 2   51.902
DGNGNTWLTAFVTK  0.0088  1522.75 2   96.1395
DGNGNTWLTAFVTK  0.9961  1523.74 2   98.289
DGNGNTWLTAFVTK  0.9979  1523.74 2   99.1948
DGNGNTWLTAFVTK  0.9958  1523.74 2   98.333
DGNGNTWLTAFVTK  0.9987  1523.74 2   99.2278
DGNGNTWLTAFVTK  0.0084  1522.75 2   95.4033
DVDDPMVSQGLR 15.99492@M6 delta:13.700001    1.013   1347.63 2   46.353
GFGLSPTVGLTAFKPF    0.0052  1637.89 2   109.398
GFGLSPTVGLTAFKPF    0.0092  1637.89 2   108.368
GFGLSPTVGLTAFKPF    0.0089  1637.89 2   108.339
ILDSNEPCGGQK    0.0086  1316.61 2   31.9053
LAPDPSLVIYAIFPSGGVVADK  -0.006  2228.2  3   118.385
LAPDPSLVIYAIFPSGGVVADK  -0.0034 2228.21 3   118.413
LAPDPSLVIYAIFPSGGVVADK  -0.0082 2228.2  3   117.739
PSYQEEAVTK  0.005   1150.56 2   32.2676
PSYQEEAVTK  0.005   1150.56 2   32.2676

我想要实现的是:

  1. 聚合在Description
  2. 选择最小的Delta
  3. RT 值平均为RT_mean
  4. 为任意数字 N 添加列 RT_mean - NRT_mean + N
  5. 在输出中保留/忽略所有其他列。

我查看了聚合函数,但似乎我无法使用该函数执行特定于列的巫术。

我尝试了by(结合rbind)和ddply,但没有真正的突破。我确信可以做我想做的事,只需正确获取这些函数的参数即可。但由于我的日程安排非常紧张,我无法真正进行常规的试错学习过程。

非常感谢任何帮助或指导,特别是一些 cmets 解释答案,以防我需要修改提供的答案以适应数据。

编辑:根据 cmets,这是一个简化的示例,输入如下:

ID    Delta    Emass    Ch    RT
A    0.0084    1522.75    2    95.4033
A    0.0088    1522.75    2    96.1395
A    0.9961    1523.74    2    98.2890
B    1.0130    1347.63    2    46.3530
C   -0.0060    2228.20    3   118.3850
C   -0.0034    2228.21    3   118.4130
C    0.0082    2228.20    3   117.7390
D    0.0050    1150.56    2    32.2676
D    0.0050    1150.56    2    32.2676

期望的输出是:

ID    Delta    Emass    Ch    RT_mean    RT1    RT2
A    0.0084    1522.75    2    96.6106    93.6106    99.6106
B    1.0130    1347.63    2    46.3530    43.3530    49.3530
C   -0.0060    2228.20    3   118.1790   115.1790   121.1790
D    0.0050    1150.56    2    32.2676    29.2676    35.2676

【问题讨论】:

  • 请解释:calculate E.Mass - Delta, alternatively pick the (Delta, E.Mass) pair with the smallest Delta.。第二部分没看懂此外,对于 E.Mass - Delta,您想要两种方法的差异吗?
  • group_bymutate from dplyr 包将是一个开始。
  • 请提供您想要的输出。
  • @DavidArenburg 一个更简单的例子,现在提供了所需的输出

标签: r aggregate-functions data-analysis


【解决方案1】:

这些操作很容易使用dplyr 包试试这个。 无法理解最小的增量部分。否则,此代码将执行其他所有操作。一个更容易重现的例子,最后有预期的答案会有所帮助。

 library(dplyr)
data %>% group_by(Description) %>% summarize(dif = E.Mass - Delta,
RT_mean = mean(RT),RT_x = RT_mean - 2, RT_y RT_mean -3)

【讨论】:

    猜你喜欢
    • 2021-03-28
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 2019-10-07
    相关资源
    最近更新 更多