1

最初に手動で Excel ファイルに入力し、後で R で処理する必要があるハードコピー用紙のデータがあります。データには、異なる時点 (例: 08:10 、08:20 など) 異なる日付 (18.08.2014、19.08.2014)。各読書シリーズの基準開始時間 (例: 08:00) と基準開始日 (例: 18.08.2014) が利用可能です。

データを含むExcelファイルは次のようになります

ID  Reading Date        Time    Ref/Start Time  Ref/Start Date
1   12.1    18.08.2014  7:59    8:00            18.08.2014
1   26.34   18.08.2014  8:10    8:00            18.08.2014
1   35.2    18.08.2014  8:20    8:00            18.08.2014
1   30      18.08.2014  8:30    8:00            18.08.2014
1   12      19.08.2014  8:00    8:00            18.08.2014
1   13      19.08.2014  20:00   8:00            18.08.2014
1   12      20.08.2014  8:00    8:00            18.08.2014

これらのデータは、後で R で処理する必要があります。私の目標は、各読み取りシリーズの開始時点から時間単位で各読み取りの時間を含む新しい列を生成することです。つまり、(y) 対 (x) を取得します。ここで、(x) は開始からの時間数です。この Excel ファイルを R にインポートしました (以前は .csv として保存されていました) が、R で新しい列を生成するにはどうすればよいかわかりません! 最初にExcelで別の方法でデータを挿入する必要がありますか?

必要なものを明確にすることに成功し、誰かから助けの手を見つけることができることを願っています.

よろしくお願いします。

4

1 に答える 1

2

これを実現するには多くの方法があります。これが1つです。

と呼ばれるcsvファイルにデータがあると仮定すると、time_d.csvこれを行うことができます:

time_d.csv は次のようになります。

ID  Reading Date    Time    Ref_time    Ref_date
1   12.1    18.08.2014  07:59   08:00   18.08.2014
1   26.34   18.08.2014  08:10   08:00   18.08.2014
1   35.2    18.08.2014  08:20   08:00   18.08.2014
1   30      18.08.2014  08:30   08:00   18.08.2014
1   12      19.08.2014  08:00   08:00   18.08.2014
1   13      19.08.2014  20:00   08:00   18.08.2014
1   12      20.08.2014  08:00   08:00   18.08.2014

列見出しを少し変更したことがわかります。次に、この形式の .csv を使用すると、次のことができます。

a1=read.csv("time_d.csv") #reads data into R data frame
a1$date_read=paste(a1$Date, a1$Time, sep=" ") #adds a new col to data frame
#by merging two existing cols

a1$date_ref=paste(a1$Ref_date, a1$Ref_time, sep=" ") #adds new col
a1=subset(a1,select=-c(Date,Time)) #removes the no longer needed cols
a1=subset(a1,select=-c(Ref_date,Ref_time)) #removes the no longer needed cols

a1$date_read=as.POSIXct(strptime(a1$date_read,"%d.%m.%Y %H:%M" )) #convert 
#to date/time objects

a1$date_ref=as.POSIXct(strptime(a1$date_ref,"%d.%m.%Y %H:%M" ))

a1$Duration=difftime(a1$date_read,a1$date_ref, units="hours") #adds new col 
#calculating the time difference in hours

特定のデータでは、この行の日付の形式が重要です。 as.POSIXct(strptime(a1$date_read,"%d.%m.%Y %H:%M" )) 日付の形式を変更する場合は、R でもこの行コードを変更する必要があります。

最終結果は次のようになります。

  ID Reading           date_read            date_ref          Duration
1  1   12.10 2014-08-18 07:59:00 2014-08-18 08:00:00 -0.01666667 hours
2  1   26.34 2014-08-18 08:10:00 2014-08-18 08:00:00  0.16666667 hours
3  1   35.20 2014-08-18 08:20:00 2014-08-18 08:00:00  0.33333333 hours
4  1   30.00 2014-08-18 08:30:00 2014-08-18 08:00:00  0.50000000 hours
5  1   12.00 2014-08-19 08:00:00 2014-08-18 08:00:00 24.00000000 hours
6  1   13.00 2014-08-19 20:00:00 2014-08-18 08:00:00 36.00000000 hours
7  1   12.00 2014-08-20 08:00:00 2014-08-18 08:00:00 48.00000000 hours
于 2014-08-27T09:52:27.750 に答える