【问题标题】:Returning more than 1 variable in aggregate function [duplicate]在聚合函数中返回超过 1 个变量 [重复]
【发布时间】:2021-10-19 22:37:42
【问题描述】:

我目前有一个名为 all_ext 的 EMG 数据框,我需要从中提取数据。数据框如下所示。

LHvector RHvector trigger time group
-1.279411e-01 0.1422139707 1 0.0000 L
-8.294112e-02 0.1112139707 1 0.0005 L
-3.794112e-02 0.0642139707 1 0.0010 L
-4.394112e-02 0.0422139707 1 0.0015 L
2.058879e-03 -0.014786029 1 0.2000 L
7.605888e-02 0.023213971 2 0.0000 L

等等(我跳了一点来详细说明)。

有2组(L,R),每组有50个触发器,时间从0s到0.2s。

我想要做的是在所有组和触发器的 RHvector 处于最大值时提取所有 5 个值(LHvector、RHvector、触发器、时间和组)。

到目前为止,我写的是 aggregatedval <- aggregate(x = all_ext$RHvector, by = list(all_ext$group, all_ext$triggers), max),它给了我触发器和组值以及组 1 和 2,以及最大 RHvector 作为我的 x。

Group.1 Group.2 x
L 1 0.64821397
R 1 0.14332592
L 2 0.66621397
R 2 0.05932592
L 3 0.28721397
R 3 0.05832592

但我也想要 RHvector 处于最大值时的时间和 LHvector 值。我试图用

进行后续搜索

MaxRHTime <- all_ext$time[all_ext$RHvector == aggregatedval$x]

导致0.0250 0.0095 0.0310 0.0860的奇数时间值

我超级卡住了。我觉得我可以将聚合函数 max 编辑为更有用且特定于 RHvector 的东西,这样我也可以返回超过 1 个值。

请帮忙。

【问题讨论】:

  • 欢迎来到 StackOverflow!请阅读有关how to ask a good question 的信息以及如何提供reproducible example。这将使其他人更容易帮助您。
  • 使用dplyrall_ext %>% group_by(trigger, group) %>%slice(which.max(RHvector))
  • @RonakShak 这行得通!谢谢!

标签: r dataframe aggregate


【解决方案1】:

首先确保您的数据框按分组变量和 RHvector 排序

all_ext=all_ext[order(all_ext$group,all_ext$trigger,all_ext$RHvector),]

然后被他们分开并取最后一行

do.call(rbind,by(all_ext,list(all_ext$group,all_ext$trigger),tail,1))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-28
    • 2013-11-13
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 2015-06-22
    • 1970-01-01
    相关资源
    最近更新 更多