基于其他列对数据帧子集进行矢量化

时间:2017-11-08 16:02:56

标签: r

我有心理学实验的数据框,其中包括自实验开始以来每个科目的时间,我想要的是从每个科目的每个试验开始以来的时间设置。为此,我基本上只是将每个试验/受试者的最小时间值减去相同试验/受试者的所有值。

我目前正在使用两个for循环,我只是想知道是否有一种方法可以实现矢量化。我现在有什么:

for (s in 1:max(df$Subject)){
  subject <- df[df$Subject==s,]
  for (t in 1:max(subject$TrialId)){
    trial <- subject[subject$TrialId==t,]
    start_offset <- min(trial$timestamp)
    df$timestamp[df$Subject==s & df$TrialId==t] <- df$timestamp[df$Subject==s &
                                                                df$TrialId==t]
                                                     - start_offset
  }
}

我想要的是

df$timestamp <- df$timestamp - min_per_trial_per_subject(df$timestamp)

1 个答案:

答案 0 :(得分:3)

使用dplyr

library(dplyr)
df %>% group_by(Subject, TrialId) %>%
  mutate(modified_timestamp = timestamp - min(timestamp))

应该有效。如果没有,请分享一个可重复的示例,以便我们进行测试。