用ggplot绘制R中不等长的离散组

时间:2016-02-15 20:31:31

标签: r ggplot2

我试图通过基本上是一个关键值来绘制一些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之前正确分组这些。

感谢您的帮助。

1 个答案:

答案 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来获取您正在寻找的图形。