0

同じデータ フレーム内の他の変数の値に従って、データ フレームの値を変更 (または保持) したい。私はあまり成功せずに探して答えてきました。これは私が持っているデータベースの例です:

    date    day VM  id
12/01/2013  4   133 1
12/01/2013  4   163 1
13/01/2013  5   143 1
13/01/2013  5   123 1
14/01/2013  6   90  1
14/01/2013  6   190 1
15/01/2013  7   922 1
15/01/2013  7   952 1
16/01/2013  1   13  1
16/01/2013  1   25  1
17/01/2013  2   333 1
17/01/2013  2   123 1
18/01/2013  3   143 1
18/01/2013  3   169 1
19/01/2013  4   203 1
19/01/2013  4   133 1

各数字は 1 日 (1:月曜日、2:火曜日、...) を表し、各日には数百のデータがあり、情報は 8 日間であるため、1 日が繰り返されます (ただし、日付は異なります)。要約を適用すると、繰り返される日のデータが混在しているという情報が得られます。それを避けたいのですが、最終使用日 (繰り返されるもの) を 8 に変更することを考えていますが、繰り返される日は id によって変更され、私はたくさんのデータを持っています。これまでのところ、私はこれを試しました:

unicos<-unique(data$id)
 data_corr<-NULL
 for(j in 1:length(unicos))
  subset<-data[which(data$id==unicos[j]),]
  subset$day1<-NULL
  times<-0
  vector<-NULL

  for(i in 1:(dim(subset)[1])){
    if((subset$day[i]<-subset$day[1]) && if (subset$date[i]<-subset$date[1])){
        vector<-c(vector, i)
        times<-times+1
        subset$day1[i]<-subset$day[1]   
    }
    subset$day1<-8  
  }
  Basal_corr<-rbind(Basal_corr, subset)
}

最初の「for」は、一度に 1 つの ID に条件を適用することを意味します。2番目の部分は難しいものです。私がやりたいことは、行[i]の日が最初の行の日と同じである場合(それは繰り返される日であるため)、日付を確認することです。元の日の値を day1 という新しい列に保持したいのですが、日付が異なる場合、day1 の値は 8 になります。 id による変更。私はそれを実行しようとするたびに「エラー」を受け取ります。私はRの初心者であり、これは私が今まで知っていることを超えています。

4

1 に答える 1

1

あなたが説明するもの

各数字は 1 日 (1:月曜日、2:火曜日、...) を表し、各日には数百のデータがあり、情報は 8 日間であるため、1 日が繰り返されます (ただし、別の日付)。

実際にはユリウス日の定義です。この関数はベース R に含まれています。ループは必要ないと思います。コードは 2 行だけです。参考までに、R はベクトルで動作するため、関数は値のベクトル/列全体を同時に参照します。

Days$date <- as.Date(Days$date, format = "%d/%m/%Y") 
Days$day <- julian(Days$date) - julian(Days$date[1]) + 1
Days # yields

# date day  VM id
# 1  2013-01-12   1 133  1
# 2  2013-01-12   1 163  1
# 3  2013-01-13   2 143  1
# 4  2013-01-13   2 123  1
# 5  2013-01-14   3  90  1
# 6  2013-01-14   3 190  1
# 7  2013-01-15   4 922  1
# 8  2013-01-15   4 952  1
# 9  2013-01-16   5  13  1
# 10 2013-01-16   5  25  1
# 11 2013-01-17   6 333  1
# 12 2013-01-17   6 123  1
# 13 2013-01-18   7 143  1
# 14 2013-01-18   7 169  1
# 15 2013-01-19   8 203  1
# 16 2013-01-19   8 133  1
于 2013-05-29T15:34:04.877 に答える