如何根据R中不同数据帧的条件创建新变量

How to create a new variable based on condition from different dataframe in R

我有 2 个来自实验的数据框。第一个 df 在 40 分钟内读取(大致)连续信号。有 5 列,1:3 是二进制的 - 表示是否按下了按钮。第 4 列是第 2 列或第 3 列是否被推送的二进制。第 5 列是以秒为单位的近似时间。下面的 df 示例:

initiate left right l or r time
0 0 1 1 2.8225
0 0 1 1 2.82375
0 0 1 1 2.82500
0 0 1 1 2.82625
1 0 0 0 16.82000
1 0 0 0 16.82125

等等

第二个数据框是会话信息,其中每一行都是一次试验,通常有 100-150 行,具体取决于一天。我有一列标记试用开始时间,另一列标记试用结束时间(以秒为单位)。下面 df 的示例(我省略了几个不相关的列):

trial success t start t end
1 0 16.64709 35.49431
2 1 41.81843 57.74304
3 0 65.54510 71.16612
4 0 82.65743 87.30914

等等

对于第一个数据框,我想创建一个列来指示按钮是否在试验中被按下。这是基于那些开始和结束时间第二个df。我希望它看起来像这样(iti = inter-trial,wt = within trial):

initiate left right l or r time trial
0 0 1 1 2.8225 iti
0 0 1 1 2.82375 iti
0 0 1 1 2.82500 iti
0 0 1 1 2.82625 iti
1 0 0 0 16.82000 wt
1 0 0 0 16.82125 wt

等等

我想做这样的事情,但我在 2 个数据帧之间没有分组变量,所以它不起作用:

df2 %>% 
  full_join(df1, by = "trial") %>% 
    mutate(in_iti = case_when(time < tstart & time > tend ~ "iti",
                              time > tstart & time < tend ~ "within_trial"))

关于如何根据 df2 的时间条件标记 df1 中的行有什么想法吗?

谢谢!

也许可以试试下面的方法,如果你的数据比较小,用dplyr。假设 dfdf2 的 data.frames 的名称。使用 mutate 创建新列,并 ifelse 将第一个 data.frame 中的每个 time 与第二个 [=] 中的 t_startt_end 进行比较27=].

library(dplyr) 

df %>%
  rowwise() %>%
  mutate(trial = ifelse(any(time > df2$t_start & time < df2$t_end), "wt", "iti"))

输出

  initiate  left right l_or_r  time trial
     <int> <int> <int>  <int> <dbl> <chr>
1        0     0     1      1  2.82 iti  
2        0     0     1      1  2.82 iti  
3        0     0     1      1  2.82 iti  
4        0     0     1      1  2.83 iti  
5        1     0     0      0 16.8  wt   
6        1     0     0      0 16.8  wt