我试图通过基本上是一个关键值来绘制一些paritally顺序数据。这是一个示例data.frame来说明问题。
testDf <- data.frame("x1" = c(26.7, 33.0, 23.6, 18.4, 26.7, 75.0, 52.5, 51.5, 56.1, 60.1, 57.7, 37.6, 32.1, 47.7, 65.7, 55.9, 29.6, 32.1, 26.6, 19.3),
"y1" = c(8.1, 3.5, 4.9, 24.6, 23.6, 2.8, 95.7, 93.9, 84.5, 83.0, 94.7, 74.4, 32.5, 6.7, 5.6, 40.7, 25.6, 16.5, 13.2, 22.6),
"x2" = c(33.0, 23.6, 18.4, 26.7, 75.0, 77.2, 51.5, 56.1, 60.1, 57.7, 37.6, 32.1, 47.7, 65.7, 77.9, 58.0, 32.1, 26.6, 19.3, 22.2),
"y2" = c(3.5, 4.9, 24.6, 23.6, 3.3, 3.1, 93.9, 84.5, 83.0, 94.7, 74.4, 32.5, 6.7, 5.6, 3.7, 43.3, 16.5, 13.2, 22.6, 24.3),
"event" = c(8, 1, 1, 1, 1, 44, 8, 1, 1, 11, 12, 1, 1, 1, 36, 8, 8 , 1, 1, 12) )
所以8是这里的神奇数字。我需要从事件的每次出现开始== 8.然后将所有x,y对与段连接起来,直到下一个事件== 8(它不重要的是其他事件&#39;数字是,8是对过滤/重置目的重要的值)。
简单地说,这里有四个单独的集合。第1行到第6行是一组连接的段;第7行到第15行是另一组段。第16行只是一个单独的段。然后第16到20行是另一组连接的段。
Df可能看起来有点乱,但第n行的(x2,y2)值与n + 1行的(x1,y1)值相同(8s除外)。只有一个例外,从第5行到第6行的y有一个小的,不连续的跳跃。
我尝试添加一个实际索引的列(在使用verboten&#39; if&#39;循环之前使用&#39; rle&#39;),使用reshape按这些索引分组,然后使用ggplot来制作片段。但经过多次尝试后,我无法获得我想要的融化Df。这似乎应该更容易,但我有点难以理解如何在传递给ggplot之前正确分组这些。
感谢您的帮助。
答案 0 :(得分:2)
您可以通过累计event == 8
。
testDf$ind <- cumsum(testDf$event == 8)
这为您提供了以下数据框:
x1 y1 x2 y2 event ind
1 26.7 8.1 33.0 3.5 8 1
2 33.0 3.5 23.6 4.9 1 1
3 23.6 4.9 18.4 24.6 1 1
4 18.4 24.6 26.7 23.6 1 1
5 26.7 23.6 75.0 3.3 1 1
6 75.0 2.8 77.2 3.1 44 1
7 52.5 95.7 51.5 93.9 8 2
8 51.5 93.9 56.1 84.5 1 2
9 56.1 84.5 60.1 83.0 1 2
10 60.1 83.0 57.7 94.7 11 2
11 57.7 94.7 37.6 74.4 12 2
12 37.6 74.4 32.1 32.5 1 2
13 32.1 32.5 47.7 6.7 1 2
14 47.7 6.7 65.7 5.6 1 2
15 65.7 5.6 77.9 3.7 36 2
16 55.9 40.7 58.0 43.3 8 3
17 29.6 25.6 32.1 16.5 8 4
18 32.1 16.5 26.6 13.2 1 4
19 26.6 13.2 19.3 22.6 1 4
20 19.3 22.6 22.2 24.3 12 4
使用此索引列,您应该能够使用ggplot2来获取您正在寻找的图形。