【发布时间】:2015-05-01 14:32:46
【问题描述】:
由于某种原因,我对这个特定问题有一个盲点。
样本数据:
date id1 id2
1888-09-08 A E
1888-09-15 B M
1888-09-22 C L
1888-09-22 D B
1888-09-29 A R
1888-10-27 F G
1888-11-17 J H
1888-11-17 E O
1888-11-24 H F
1888-12-15 G L
1889-01-19 K G
1889-02-09 M E
我要做的是创建第 4 个变量,该变量将从 1 开始并在观察时增加 1,只要重复来自 'id1' 或 'id2' 的值。每当一个值从上次增加时的观察开始重复时,它将再次增加 1。
预期结果:
date id1 id2 value
1888-09-08 A E 1
1888-09-15 B M 1
1888-09-22 C L 1
1888-09-22 D B 2
1888-09-29 A R 2
1888-10-27 F G 2
1888-11-17 J H 2
1888-11-17 E O 2
1888-11-24 H F 3
1888-12-15 G L 3
1889-01-19 K G 4
1889-02-09 M E 4
如您所见,在第四行,id "B" 像以前一样重复。因此值变量增加到'2'。从这一行开始,然后我们搜索下一个重复的“id”。这发生在第 9 行,其中重复“H”(自上次“值”更改以来,它已在先前的观察中看到)。然后该值更改为 3,并且下一行的 next 更改,但一个作为“G”重复。
我希望这是有道理的。
我还没有走多远。我的主要想法是将两列变成一个长向量,然后找到第一个重复值。由此,我们可以计算出属于不同行的所有元素都会得到“1”,而这个元素“8”和它的伙伴“7”会得到 2。我们可以从第 7 个元素(第对)向前寻找更多重复...
temp <- as.matrix(c(rbind(as.character(dfr[,2]), as.character(dfr[,3])))) #put two columns into single vector
min(which(duplicated(temp))) #8
我不确定这会有多有效。
【问题讨论】:
标签: r