首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在独立数据帧R中迭代行组

在独立数据帧R中迭代行组
EN

Stack Overflow用户
提问于 2020-06-18 07:22:38
回答 2查看 47关注 0票数 0

我有两个不同长度的不同数据帧,如下所示(并不是所有的行都显示在这里):

代码语言:javascript
复制
all_eeg

       EEG    Recording
88     55.746      AA00
89     56.277      AA00
90     56.738      AA00
91     57.159      AA00
92     57.550      AA00
93     57.817      AA00

1549   51.001      AB00
1550   51.504      AB00
1551   51.609      AB00
1552   52.080      AB00
1553   52.461      AB00
1554   52.977      AB00
1555   53.366      AB00

6260 1000.644      AF01
6261 1000.745      AF01
6262 1001.800      AF01
6263 1002.180      AF01
6264 1003.333      AF01
6265 1004.230      AF01


all_1p

         Time LFP_Latency LFP_Amplitude Peak_LFP_Length Recording Electrode
1     57.1184     7.11995        -0.414         8.46697      AA00         1
2    123.3470     5.32393        -0.018         5.00321      AA00         1
3    191.0920    10.58370        -0.426         5.38807      AA00         1
4    249.1710     4.49006        -0.042         5.25978      AA00         1
5    325.5090     7.11995        -0.486         7.69724      AA00         1
6    385.6040     5.77293        -0.012         4.04105      AA00         1

131    51.730     8.86496      -1.22667         5.71567      AB00         1
132   117.684     8.62209      -2.56667         3.93459      AB00         1
133   184.974     8.20110      -3.51333         3.62694      AB00         1
134   242.875     7.39152      -3.50667         4.77655      AB00         1
135   319.604     7.42390      -2.74667         4.30699      AB00         1
136   379.350     8.81639      -1.06000         5.97474      AB00         1
137   430.632    10.74320      -1.81333         4.19365      AB00         1

296 1003.4300     4.09302      -1.90800         7.93798      AF01         2
297 1072.0500    11.16280      -2.48400         5.76744      AF01         2
298 1132.8900     8.93023      -1.39200         7.19380      AF01         2
299 1197.8800     6.63566      -1.03200        10.35660      AF01         2
300 1259.2800    10.23260      -2.98800         8.18605      AF01         2
301   61.8331    10.03750      -2.08600         5.25328      AF02         2

我想要创建一个新的数据框架(或者从all_eeg中删除行)。我想要“保留”的行应该基于all_eeg$EEG中与all_1p$Time 中每个数字最接近的较小的数字当且仅当它们属于同一记录。因此,我认为代码首先应该在all_1p$Recording中的行上迭代,然后在all_eeg$Recording中搜索具有相同值的行,然后遍历all_1p$Time中的索引,然后在all_eeg$EEG中识别最接近的较小的数。因此,新数据帧中的第一行将是来自all_eeg的第90行,因为它包含与属于同一记录的all_1p$Time中的第一个索引最接近的较小的数字。

我试着写一个循环,但有些地方不对劲。

代码语言:javascript
复制
pre_eeg_list <- c()

for(i in 1:nrow(all_1p)){
   if(all_1p$Recording[i] == all_eeg$Recording){
    pre_eeg_list[i] <- max(all_eeg$EEG[all_1p$Time[i] >= all_eeg$EEG]) 
  }
} 

我希望你能帮助我。

EN

回答 2

Stack Overflow用户

发布于 2020-06-18 07:40:44

我可以很容易地完成dplyr包。

代码语言:javascript
复制
> Library(dplyr) 
> all_eeg %>%  left_join(all_1p %>% group_by(Recording) 
> %>% summarize(min_time = min(Time)) ) %>% mutate(time_delta = Time -
> min_time) %>% group_by(Recording) %>% filter(time_delta =
> min(time_delta))

  • 步骤1:通过每个录制
  • 步骤2:左加入最小时间与all_eeg,并找到时间与最小时间之间的时间增量
  • 步骤3:根据每个录制的

筛选最低时间增量

票数 0
EN

Stack Overflow用户

发布于 2020-06-18 07:42:56

针对这类问题,我建议从包的dplyr集合中使用tidyverse。而且,在将来,您可能希望以一种可以直接复制粘贴到R中的格式提供示例数据,我还没有对它进行测试,但是这样的东西应该可以解决您的问题。

代码语言:javascript
复制
library(tidyverse)

all_eeg %>%
    inner_join(all_1p, by = "Recording") %>%
    mutate(t_diff = Time - EEG) %>%
    group_by("Recording", "Time") %>%
    filter(t_diff == min(t_diff))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62444498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档