在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