我有一些数据与我建立的这个小例子相似。其中的名称是5个传感器a-e
的名称。但是,在这种情况下,e
中的一个发生频率比其他情况要低得多。我需要所有5个观测值。实际数据有140k行,但是e
仅出现2k行。我的问题是,我可以在适当的字段中搜索包含e
的行,然后查看上方/下方的行来查找最近的a-d
以完成观察吗?我的目标是全部返回这些行。我似乎无法将这些点连接起来。
所以给定了:
name num val
1 a 1 1
2 b 2 4
3 c 3 9
4 d 4 16
5 c 5 25
6 e 6 36
7 b 7 49
8 d 8 64
9 c 9 81
10 d 10 100
11 c 11 121
12 a 12 144
13 c 13 169
14 b 14 196
15 e 15 225
16 d 16 256
17 c 17 289
18 b 18 324
19 d 19 361
20 c 20 400
21 d 21 441
22 c 22 484
23 a 23 529
24 c 24 576
25 b 25 625
我想要:
name num val
1 a 1 1
2 b 2 4
3 c 3 9
4 d 4 16
6 e 6 36
12 a 12 144
14 b 14 196
13 c 13 169
16 d 16 256
15 e 15 225
甚至:
[[1]]
name num val
1 a 1 1
2 b 2 4
3 c 3 9
4 d 4 16
6 e 6 36
[[2]]
name num val
12 a 12 144
14 b 14 196
13 c 13 169
16 d 16 256
15 e 15 225
尽管订购它们并不重要,但所有5个都存在。
答案 0 :(得分:1)
这可能不是最有效的解决方案,但是您基本上可以遍历每个"e"
的位置并获取彼此之间最接近的字母:
es <- which(dat$name=="e")
oths <- lapply(c("a","b","c","d"), function(x) which(dat$name == x) )
cmp <- sapply(es, function(x) sapply(oths, function(y) y[which.min(abs(y-x))]))
dat[sort(c(es,cmp)),]
# name num val
#1 a 1 1
#4 d 4 16
#5 c 5 25
#6 e 6 36
#7 b 7 49
#12 a 12 144
#13 c 13 169
#14 b 14 196
#15 e 15 225
#16 d 16 256