我有两台机器检查产品的不同方面。所以我有两组数据,两个系统生成ID,但ID指的是相同的产品被检查。并且两个系统中的ID每10个被检查的产品重置一次。有时其中一个系统出错并且没有生成ID或错误的ID。所以数据集如下所示:
data set 1: data set 2:
timestamp1 ID1 value1 timestamp2 ID2 value2
9:01 am 1 0.1 9:02 am 1 10
9:03 am 2 0.8 9:04 am 2 15
9:05 am 3 0.1 9:07 am 3 10
9:09 am 4 0.1 9:11 am 0 n/a <-system wrong
9:11 am 5 0.1 9:15 am 6 17 ID 4&5 missing
9:13 am 6 0.1 9:16 am 7 10
...................... .....data continues
9:21 am 9 0.1 9:22 am 10 19
9:22 am 10 0.1 9:23 am 1 10 <- ID back to 1
9:23 am 1 0.1 9:24 am 2 10
9:01 am 2 0.1 9:25 am 3 10
我想将两个数据集合并为一个,所以我有两个系统&#39;同一产品的检验值。预期的数据集应如下所示:
timestamp1 ID1 value1 timestamp2 ID2 value2
9:01 am 1 0.1 9:02 am 1 10
9:03 am 2 0.8 9:04 am 2 15
9:05 am 3 0.1 9:07 am 3 10
9:09 am 4 0.1 9:11 am n/a n/a <-system wrong
9:11 am 5 0.1 n/a n/a n/a
9:13 am 6 0.1 9:15 am 6 17
9:14 am 7 0.1 9:16 am 7 10
..................data continues
9:23 am 1 0.1 9:23 am 1 10 <- ID back to 1
9:01 am 2 0.1 9:25 am 2 10
我尝试了几个合并功能,问题是ID每10个产品重置一次。没有唯一的ID可供匹配,我从merge()函数得到的结果都搞砸了。 实际数据集通常具有&gt;每次生产运行10,000行数据。逐行挑选出这些问题是不可能的。 任何人都能提供一些帮助吗?感谢。
答案 0 :(得分:0)
这是我的方法,使用我生成的一些样本数据看起来像你的。在我的示例数据中,&#34; n / a&#34;被编码为NA,所以如果你想完美匹配,我会重新编码&#34; n / a&#34;缺失值(NA)。
首先,我加载包dplyr并创建一些示例数据:
$('.postoption').click(function(){
$(this).find('i').toggleClass('fa-star-o fa-star');
$(this).find('i').toggleTitle('Favorite This Post *OR* Remove Favorite')
});
第一个数据集的预览如下所示:
library(dplyr)
### Create some example data ###
time <- Sys.time()
time_seq1 <- seq(time, time + 40, 2)
time_seq2 <- seq(time, time + 40, 3)
id <- rep(seq(1, 10, 1), 3)
id1 <- id[1:length(time_seq1)]
id2 <- id[1:length(time_seq2)]
df1 <- data.frame(time1 = time_seq1,
ID1 = id1,
value1 = round(rnorm(length(time_seq1), 0.5, 0.2),1))
df2 <- data.frame(time2 = time_seq2,
ID2 = id2,
value2 = round(rnorm(length(time_seq2), 15, 2),0))
df2[5, 2:3] <- NA
df2[6, ] <- NA
第二个:
head(df1, 11)
time1 ID1 value1
1 2017-11-10 10:18:07 1 0.6
2 2017-11-10 10:18:09 2 0.4
3 2017-11-10 10:18:11 3 0.4
4 2017-11-10 10:18:13 4 0.7
5 2017-11-10 10:18:15 5 0.4
6 2017-11-10 10:18:17 6 0.1
7 2017-11-10 10:18:19 7 0.8
8 2017-11-10 10:18:21 8 0.5
9 2017-11-10 10:18:23 9 0.5
10 2017-11-10 10:18:25 10 0.7
11 2017-11-10 10:18:27 1 0.1
现在我使用dplyr创建滞后变量,但您可以使用其他函数来创建滞后变量。因为第二个数据集中只有缺失,所以我只将步骤应用于第二个数据集,尽管您也可以为第一个数据集复制它。
此外,当您的数据中存在两个连续缺失值时,滞后变量将无法完全正常工作。我添加了一个&#34; while循环&#34;运行过程直到所有错过都被处理。
最后,我创建了唯一的ID并将它们合并在一起。
head(df2, 11)
time2 ID2 value2
1 2017-11-10 10:18:07 1 14
2 2017-11-10 10:18:10 2 16
3 2017-11-10 10:18:13 3 15
4 2017-11-10 10:18:16 4 19
5 2017-11-10 10:18:19 NA NA
6 <NA> NA NA
7 2017-11-10 10:18:25 7 17
8 2017-11-10 10:18:28 8 14
9 2017-11-10 10:18:31 9 13
10 2017-11-10 10:18:34 10 13
11 2017-11-10 10:18:37 1 14