我有来自硬拷贝纸的数据,必须先在excel文件中手动输入,然后在R中处理。 该数据包含在不同日期(18.08.2014,19.08.2014)的不同时间点(例如,08:10,08:20等)的不同受试者(通过ID)的变量(阅读)的多个读数。每个阅读系列的参考开始时间(例如,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中以另一种方式插入数据吗?
我希望我成功地澄清了我的需要,并且我可以从某人那里找到帮助。
非常感谢提前。
答案 0 :(得分:2)
有很多方法可以实现这一目标。这是一个。
假设您有一个名为time_d.csv
的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