在R中使用head和tail函数获取行中的差异

在R中使用head和tail函数获取行中的差异,r,tail,head,R,Tail,Head,我有这样的数据 id Pos 1 1 2 10 3 4 4 2 5 3 6 16 我想做的是根据id计算Pos行之间的差值。如果id是奇数,那么差值是1-10=-9。如果id为偶数,则差值为10-1=9 所以我应该 difference -9 9 2 -2 -13 13 我试过这个 q <- ifelse( (id %% 1) == 0,(tail(Pos, -1) - head(Pos, -1)), (head(Pos, -1) - tail(Po

我有这样的数据

id Pos
1    1
2    10
3    4
4    2
5    3
6    16
我想做的是根据id计算Pos行之间的差值。如果id是奇数,那么差值是1-10=-9。如果id为偶数,则差值为10-1=9

所以我应该

difference
-9
9
2
-2
-13
13
我试过这个

q <- ifelse( (id %% 1) == 0,(tail(Pos, -1) - head(Pos, -1)), (head(Pos, -1) - tail(Pos, -1)) )
但它只适用于赔率数字

你知道在R里怎么做吗

干杯


Günal

一个选项是使用gl为每两个元素创建一个组,取“Pos”的差值,复制两次或n,并根据奇数/偶数行更改符号

数据
一个选项是使用gl为每两个元素创建一个组,取“Pos”的差值,复制两次或n,并根据奇偶行编号更改符号

数据
以下是一个基本解决方案:

i <- seq(from = 1,to = nrow(DF), by = 2)
DF$difference <- rep(DF$Pos[i] - DF$Pos[i+1], each = 2)
DF$difference[i+1] <- DF$difference[i+1] * -1

DF

  id Pos difference
1  1   1         -9
2  2  10          9
3  3   4          2
4  4   2         -2
5  5   3        -13
6  6  16         13

以下是一个基本解决方案:

i <- seq(from = 1,to = nrow(DF), by = 2)
DF$difference <- rep(DF$Pos[i] - DF$Pos[i+1], each = 2)
DF$difference[i+1] <- DF$difference[i+1] * -1

DF

  id Pos difference
1  1   1         -9
2  2  10          9
3  3   4          2
4  4   2         -2
5  5   3        -13
6  6  16         13

谢谢@akrun。这是可行的,但还有两件事:1我的原始Pos由740个观测值组成。如何根据我的数据调整您的代码2如何提取差异以便将其用于calculations@G尤纳尔。这不重要,因为总账是基于行数的n@G尤纳尔。请您应用相同的代码bcz,它不依赖于任何其他约束,除了数据行数为740谢谢@akrun。这是可行的,但还有两件事:1我的原始Pos由740个观测值组成。如何根据我的数据调整您的代码2如何提取差异以便将其用于calculations@G尤纳尔。这不重要,因为总账是基于行数的n@G尤纳尔。您可以应用相同的代码bcz吗?除了数据的行数为740之外,它不依赖于任何其他约束
df1 <-  structure(list(id = 1:6, Pos = c(1L, 10L, 4L, 2L, 3L, 16L)), 
  class = "data.frame", row.names = c(NA, 
-6L))
i <- seq(from = 1,to = nrow(DF), by = 2)
DF$difference <- rep(DF$Pos[i] - DF$Pos[i+1], each = 2)
DF$difference[i+1] <- DF$difference[i+1] * -1

DF

  id Pos difference
1  1   1         -9
2  2  10          9
3  3   4          2
4  4   2         -2
5  5   3        -13
6  6  16         13