我有两个不同长度的不同数据帧,如下所示(并不是所有的行都显示在这里):
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中的第一个索引最接近的较小的数字。
我试着写一个循环,但有些地方不对劲。
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])
}
} 我希望你能帮助我。
发布于 2020-06-18 07:40:44
我可以很容易地完成dplyr包。
> 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))筛选最低时间增量
发布于 2020-06-18 07:42:56
针对这类问题,我建议从包的dplyr集合中使用tidyverse。而且,在将来,您可能希望以一种可以直接复制粘贴到R中的格式提供示例数据,我还没有对它进行测试,但是这样的东西应该可以解决您的问题。
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))https://stackoverflow.com/questions/62444498
复制相似问题