2017-11-08 11 views
0

私は、各対象の実験開始からの時間と心理学実験のデータフレームを持っています。私が望むのは、各被験者の試験。これを行うには、基本的には、各試行/被験者の最小時間値を、同じ試行/被験者のすべての値に差し引くだけです。他の列に基づくデータフレームのサブセット上のベクトル化関数

私は現在2つの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 
    } 
} 

そして、何私が希望することはdplyr

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

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

データセットのサンプルを追加できますか? https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – Ale

+0

完全なデータセットは技術的にGithubにありますが、これで十分でしょうか? –

答えて

3

のようなものが動作するはずです。そうでない場合は、再現可能な例を共有してテストしてください。

+0

うまく動作します!あなたの行頭に 'df < - 'を置く必要があります( '%>% '表記に慣れていないので、それは分かりません)。どうもありがとう! –

+3

私は割り当てに関する仮定をしたくない - あなたは 'df_modified < - ...' – Gregor

関連する問題