我有心理学实验的数据框,其中包括自实验开始以来每个科目的时间,我想要的是从每个科目的每个试验开始以来的时间设置。为此,我基本上只是将每个试验/受试者的最小时间值减去相同试验/受试者的所有值。
我目前正在使用两个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)
答案 0 :(得分:3)
使用dplyr
library(dplyr)
df %>% group_by(Subject, TrialId) %>%
mutate(modified_timestamp = timestamp - min(timestamp))
应该有效。如果没有,请分享一个可重复的示例,以便我们进行测试。