我正在重新格式化大量的水质数据,以便反馈到数据库中。当志愿者获取数据时,他们经常会使用一个水样进行多次测试,并将其记录为相同的样品编号,日期和时间。但是,数据库将不接受这一点,因此需要不同的采样时间。从历史上看,解决方案是为同一样本编号的每个后续测量增加第二个。例如,
Sample Number DateTime
180433 2019-11-04 12:30:00
180433 2019-11-04 12:30:00
180433 2019-11-04 12:30:00
180433 2019-11-04 12:30:00
180433 2019-11-04 12:30:00
然后我需要将时间设置为12:30:00、12:30:01、12:30:02、12:30:03、12:30:04。虽然我已经为此编写了一些代码,但它有点笨拙,而且我知道必须有一个更优雅的方法。
LIMS_dup<-LIMS_data[duplicated(LIMS_data[,c(4,8:9)]),8:9)]
x<-NA
for (i in 1:length(unique(LIMS_dup$CustomerSampleNumber))){
x<-which(as.integer(LIMS_data$CustomerSampleNumber)==as.integer(unique(LIMS_dup$CustomerSampleNumber)[i]))
if (length(x)>1){
for (j in 2:length(x)){
LIMS_data$CollectTime[x[j]]<-LIMS_data$CollectTime[x[j-1]]+1
}
}
}
其中LIMS_data是我的主要小标题,而LIMS_dup是重复的样本编号和时间的小标题。确实可以,但是有点慢。我希望找到一种更好的方法,尤其是一种不依赖嵌套循环的方法。