0

我正在尝试使用 R 返回一些值,例如如果两行 (i+1) 和 i 之间的差异小于或等于 1,则“节点”=1。我的数据看起来像:

   id   x        y
   1    7        1
   2    7        2
   3    7        2
   4    7        4
   5    7        5
   6    7        7
   7    7        8
   8    7        10
   9    7        10
  10    7        12

我想得到:

   id   x        y  diff  node
   1    7        1  0     1
   2    7        2  1     1
   3    7        2  1     1
   4    7        4  2     2
   5    7        5  1     2
   6    7        7  2     3
   7    7        8  1     3
   8    7        10 2     4
   9    7        10 0     4
  10    7        12 2     5

上面, diff 是两个连续行之间的差异,包括 1st row 和 1st row = 0 的差异。如果 diff <=1,则第一个差异的节点为 1,否则为 2,直到 diff<=1。如果 diff>1 则 node=3,以此类推。

我试图尽可能清楚地解释,如果我不够清楚,我很抱歉。

4

1 回答 1

2

试试这个,假设你的 data.frame 被称为dat

dat$node <- c(0,cumsum(diff(dat$y)>1))+1
dat$diff <- c(0,ifelse(diff(dat$y)>1,2,1))

给予:

> dat
   id x  y node diff
1   1 7  1    1    0
2   2 7  2    1    1
3   3 7  2    1    1
4   4 7  4    2    2
5   5 7  5    2    1
6   6 7  7    3    2
7   7 7  8    3    1
8   8 7 10    4    2
9   9 7 10    4    1
10 10 7 12    5    2
于 2013-09-13T01:58:08.067 回答