【发布时间】:2018-03-19 19:53:40
【问题描述】:
我想比较给定行的上一行和下一行。我为此目的使用了diff 函数,但不幸的是它没有提供我需要的东西。类似的帖子是here,但我的帖子是在寻找不同的东西!
这就是我的意思
test = data.frame(y1=c(10,22,22,36,36,36,38),
y2=c(12,22,18,21,14,17,15))
> test
y1 y2
1 10 12
2 22 22
3 22 18
4 36 21
5 36 14
6 36 17
7 38 15
我试过了
test%>%
mutate(diff_y1=c(NA,diff(y1)))
y1 y2 diff_y1
1 10 12 NA
2 22 22 12
3 22 18 0
4 36 21 14
5 36 14 0
6 36 17 0
7 38 15 2
我想要的是,如果该行的前一行有连续行,则分配相同的差异编号。看到diff 函数给出了不同的diff_y1 值。这是正常的。我要补充的是,如果第一行开始连续行,则设置相同的差异值。
如果第 i 行和 i+1 或 i 和 i-1 相同,我希望第 i 和 i+1 行或 i 和 i-1 上的值为 0。
这样的结果是预期的输出
y1 y2 diff_y1
1 10 12 NA
2 22 22 0
3 22 18 0
4 36 21 0
5 36 14 0
6 36 17 0
7 38 15 2
【问题讨论】:
-
你的说法不清楚。
-
@Onyambu 我稍微编辑了 OP。你能告诉我哪一部分不清楚吗?
-
我不明白你的分配程序。为什么你有一堆零然后是 2?您使用什么逻辑在第 4 行分配 0 或在第 2 行分配 0?
-
diff函数从当前值中减去前一个值。我确实理解这一点,它给出了您声称的错误输出。那么你使用什么逻辑来获得预期的输出呢? -
@Onyambu 好的。看到
diff函数给出了不同的diff_y1值。这是正常的。我要补充的是,如果第一行开始连续行,则设置相同的差异值。像 22 22 它们是连续的,所以我希望它们具有相同的 diff_y1 值,但可能使用另一个函数?
标签: r