私は、フォルダ内のすべてのファイルに対して2つのループを繰り返すのに苦労しています。私は600個以上の.csvファイルを持っています。このファイルには、文章中に作成されたサッカードの潜伏時間と持続時間に関する情報が含まれています。私は、各サッカードの開始と終了ポイントを計算し、開始と終了と呼ばれる2つの新しい列を作成する、ファイルのそれぞれについてRフォルダ内のすべてのファイルに対してループを反復する方法は?
order subject sentence latency duration
1 1 1 641 76
2 1 1 98 57
3 1 1 252 49
4 1 1 229 43
:彼らはこのようになります。それぞれの値は、待ち時間と期間の列の値から計算されます。
SentFile = read.csv(file.choose(), header = TRUE, sep = ",")
# Calculate Start
for (i in 1:(nrow(SentFile)-1)){
SentFile$Start[1] = SentFile$Latency[1]
SentFile$Start[i+1] = SentFile$Start[i] +
SentFile$Duration[i] + SentFile$Latency[i+1]}
#Calculate End
for (i in 1:(nrow(SentFile)-1)){
SentFile$End[i] = SentFile$Start[i] + SentFile$Duration[i]}
をそしてその結果は、次のようになります:私はそうのように、各ファイルのループを使用してこれを行うことができ、私はそれを行うためのより効率的な方法は、おそらくそこにあると確信しています
order subject sentence latency duration Start End
1 1 1 641 76 641 717
2 1 1 98 57 815 872
3 1 1 252 49 1124 1173
4 1 1 229 43 1402 1445
、ループで指定された正確なセルを使用して開始値と終了値を計算することは非常に重要です。これは、個々のファイルごとに動作させるために考えられる唯一の方法でした。
私が言ったように、600以上のファイルがあり、セット全体の開始値と終了値を計算し、各ファイルに新しい列を追加できるようにします。
sent_files = list.files()
lapply(sent_files, function(x){
SentFile = read.csv(x, header = TRUE, sep = ",")
for (i in 1:(nrow(SentFile)-1)){
SentFile$Start[1] = SentFile$Latency[1]
SentFile$Start[i+1] = SentFile$Start[i] + SentFile$Duration[i]
+ SentFile$Latency[i+1]}
#Calculate End of Saccade Absolute Time Stamp #######
for (i in 1:(nrow(SentFile)-1)){
SentFile$End[i] = SentFile$Start[i] + SentFile$Duration[i]}})
しかし、私はこのエラーメッセージ取得しておく::私はこのような、lapply使用してみました、私はこれが動作するようになってで任意の助けを本当に感謝
Error in `$<-.data.frame`(`*tmp*`, "SacStart", value = c(2934L, NA)):replacement has 2 rows, data has 1
を!
はベクトルとして 'latency'と' duration'を取り、多分いくつかの項目を 'cumsum' –
を使用しますsent_filesのあなたが期待どおりに動作しません。これをテストするには、 '' for''ループ(ここではインデックスx)と '' print(x) ''を作ることができます。次に、どのファイルが問題を引き起こしているかを知っています。次に、ファイルごとの分析またはエラーを引き起こす個々のファイルを確認して更新する必要があります。 – Phann