首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取tall dataset中分组值之间的差异

获取tall dataset中分组值之间的差异
EN

Stack Overflow用户
提问于 2019-09-17 18:42:33
回答 2查看 37关注 0票数 1

我设置了一个数据,如下所示:

代码语言:javascript
复制
Name     df Value
A         1   .5
A         2    2
A         3    3
B         1    1
B         2    .5

我希望得到值之间的差异,直到Name列更改,然后我希望它停止并开始获得新的差异。如下所示:

代码语言:javascript
复制
Name     df Value   Diff
A         1   .5      NA
A         2    2      1.5
A         3    3      2.5
B         1    1       NA
B         2    .5     -.5

有什么办法我能做到吗?我尝试过将数据集设置为宽格式,但我也想不出一种方法来使其工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-17 18:43:17

一种选择是通过diff完成一个组

代码语言:javascript
复制
library(dplyr)
df1 %>%
   group_by(Name) %>%
    mutate(Diff = c(NA, cumsum(diff(Value))))
# A tibble: 5 x 4
# Groups:   Name [2]
#  Name     df Value  Diff
#  <chr> <int> <dbl> <dbl>
#1 A         1   0.5  NA  
#2 A         2   2     1.5
#3 A         3   3     2.5
#4 B         1   1    NA  
#5 B         2   0.5  -0.5

数据

代码语言:javascript
复制
df1 <- structure(list(Name = c("A", "A", "A", "B", "B"), df = c(1L, 
2L, 3L, 1L, 2L), Value = c(0.5, 2, 3, 1, 0.5)), 
   class = "data.frame", row.names = c(NA, 
-5L))
票数 3
EN

Stack Overflow用户

发布于 2019-09-17 20:12:06

@akrun答案是可行的,但就像一个谜语一样,这也是可行的:

代码语言:javascript
复制
df1 %>% 
  group_by(Name) %>% 
  mutate(Diff = cumsum(Value - lag(Value, default = Value[1])))
代码语言:javascript
复制
# # A tibble: 5 x 4
# # Groups:   Name [2]
#   Name     df Value  Diff
#   <chr> <int> <dbl> <dbl>
# 1 A         1   0.5   0  
# 2 A         2   2     1.5
# 3 A         3   3     2.5
# 4 B         1   1     0  
# 5 B         2   0.5  -0.5
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57980261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档