首页 \ 问答 \ dplyr获得分组差异的方法(The dplyr way to get grouped differences)

dplyr获得分组差异的方法(The dplyr way to get grouped differences)

我试图找出分组差异的dplyr方法。

这是一些假数据:

>crossing(year=seq(1,4),week=seq(1,3)) %>% 
  mutate(value = c(rep(4,3),rep(3,3),rep(2,3),rep(1,3)))

    year  week value
   <int> <int> <dbl>
 1     1     1     4
 2     1     2     4
 3     1     3     4
 4     2     1     3
 5     2     2     3
 6     2     3     3
 7     3     1     2
 8     3     2     2
 9     3     3     2
10     4     1     1
11     4     2     1
12     4     3     1

我想要的是1年级2年级,2年级3年级和3年级4年级。 结果如下。

    year  week diffs
   <int> <int> <dbl>
 1     1     1     1
 2     1     2     1
 3     1     3     1
 4     2     1     1
 5     2     2     1
 6     2     3     1
 7     3     1     1
 8     3     2     1
 9     3     3     1

编辑:

我道歉。 我试图做一个简单的代表,但我搞砸了很多。

请让我知道正确的礼仪是什么。 我不想惹恼任何羽毛。

  1. 我不知道-diff()是一个函数。 我实际上寻找的是百分比差异((新旧)/旧)* 100,我无法找到使用diff来获得该值的直接方法。

  2. 我是从最大的一年开始的。 在上面的代码中添加一个arrange(desc(year))就是我所拥有的。 我将修剪最小的year而不是最大的year

如果这个编辑值得一个单独的问题让我知道。


I am trying to figure out the dplyr way to do grouped differences.

Here is some fake data:

>crossing(year=seq(1,4),week=seq(1,3)) %>% 
  mutate(value = c(rep(4,3),rep(3,3),rep(2,3),rep(1,3)))

    year  week value
   <int> <int> <dbl>
 1     1     1     4
 2     1     2     4
 3     1     3     4
 4     2     1     3
 5     2     2     3
 6     2     3     3
 7     3     1     2
 8     3     2     2
 9     3     3     2
10     4     1     1
11     4     2     1
12     4     3     1

What I would like is year 1- year2, year2-year3, and year3-year4. The result would like like the following.

    year  week diffs
   <int> <int> <dbl>
 1     1     1     1
 2     1     2     1
 3     1     3     1
 4     2     1     1
 5     2     2     1
 6     2     3     1
 7     3     1     1
 8     3     2     1
 9     3     3     1

Edit:

I apologize. I was trying to make a simple reprex, but I messed up a lot.

Please let me know what the proper etiquette is. I don't want to ruffle any feathers.

  1. I did not know that -diff() was a function. What I am actually looking for is percent difference ((new-old)/old)*100 and I am not able to find a straight forward way to use diff to get that value.

  2. I am starting from the largest year. Adding a arrange(desc(year)) to the above code is what I have. I would be trimming the smallest year not the largest.

If this edit with worth a separate question let me know.


原文:https://stackoverflow.com/questions/46650738
更新时间:2019-07-04 03:59

最满意答案

如果您每周没有错过的年份:

df %>% 
    arrange(year) %>%
    group_by(week) %>% 
    mutate(diffs = value - lead(value)) %>% 
    na.omit() %>% select(-value)

# A tibble: 9 x 3
# Groups:   week [3]
#   year  week diffs
#  <int> <int> <dbl>
#1     1     1     1
#2     1     2     1
#3     1     3     1
#4     2     1     1
#5     2     2     1
#6     2     3     1
#7     3     1     1
#8     3     2     1
#9     3     3     1

If you don't have missing years for each week:

df %>% 
    arrange(year) %>%
    group_by(week) %>% 
    mutate(diffs = value - lead(value)) %>% 
    na.omit() %>% select(-value)

# A tibble: 9 x 3
# Groups:   week [3]
#   year  week diffs
#  <int> <int> <dbl>
#1     1     1     1
#2     1     2     1
#3     1     3     1
#4     2     1     1
#5     2     2     1
#6     2     3     1
#7     3     1     1
#8     3     2     1
#9     3     3     1
2017-10-09

相关问答

更多

dplyr on data.table,我真的用data.table吗?(dplyr on data.table, am I really using data.table?)

没有直接/简单的答案,因为这两个包的哲学在某些方面有所不同。 所以一些妥协是不可避免的。 以下是您可能需要解决/考虑的一些问题。 涉及i (== filter()和slice()在dplyr中的操作) 假设DT有10列。 考虑这些data.table表达式: DT[a > 1, .N] ## --- (1) DT[a > 1, mean(b), by=.(c, d)] ## --- (2) (1)给出DT中的行数a > 1 。 (2)对于i相同的表达式( ...

dplyr中的唯一行:row_number()从tbl_dt与tbl_df不一致(unique rows in dplyr : row_number() from tbl_dt inconsistent to tbl_df)

有趣。 你的基准刺激了我的兴趣。 我觉得有点奇怪,你不能直接比较data.table的unique.data.table 。 所以这里的结果也包括在我的系统中。 # extra function with which the benchmark shown below was run dt_direct <- function() unique(dt) # where dt = as.data.table(little) # Unit: milliseconds # expr ...

R dplyr链接组进入功能(R dplyr chaining group by into function)

你现在得到的是calcStepTime应用于每个组的整个(未组合的)数据帧的结果。 尝试重写函数,使其依赖于变量,但不取决于数据框。 alcStepTime <- function(var1, var2, var3){ bf <- butter(1, c(0.03,0.05), type="pass") filtered <- filtfilt(bf, var1 - var2) peaks <- findPeaks(filtered) peakValue <- filtered[ ...

使用do.call与dplyr标准评估版本(Using do.call with dplyr standard evaluation version)

targs参数需要是一个call类。 call的变量( a和b )需要是name类。 所有这些都在下面的第二行(和第三行)完成。 ?call , ?as.name和?is.language可能会使该行更易于理解。 dat <- data.frame(a=runif(10), b=runif(10), grp=rep(1:2, each=5)) targs_quoted = do.call(call, c("list", lapply(targs, as.name)), quote=TRUE) # ...

dplyr:汇总data.frame以获取最高和最低值(dplyr: summarize data.frame to get the highest and lowest values)

如果您只想提取极值,可以将top_n的两个应用程序与filter的复合条件组合使用(请注意, top_n只是使用min_rank filter的快捷方式): library(tidyverse) iris %>% gather("dims", "value", -Species) %>% group_by(Species, dims) %>% filter( min_rank(desc(value)) <= 5 | ...

过滤多个条件dplyr(Filter multiple values on a string column in dplyr)

你需要%in%而不是== : library(dplyr) target <- c("Tom", "Lynn") filter(dat, name %in% target) # equivalently, dat %>% filter(name %in% target) 产生 days name 1 88 Lynn 2 11 Tom 3 1 Tom 4 222 Lynn 5 2 Lynn 要理解为什么,请考虑这里发生的事情: dat$name == target ...

相对频率/比例与dplyr(Relative frequencies / proportions with dplyr)

尝试这个: mtcars %>% group_by(am, gear) %>% summarise (n = n()) %>% mutate(freq = n / sum(n)) # am gear n freq # 1 0 3 15 0.7894737 # 2 0 4 4 0.2105263 # 3 1 4 8 0.6153846 # 4 1 5 5 0.3846154 从dplyr小插曲 : 当您通过多个变量进行分组时,每个 ...

不能在两个日期列上使用dplyr连接(Can't use dplyr joins on two date columns)

我无法合并的原因是如何存储两个Date对象。 由于这个问题,我决定检查两个对象的存储结构,并确保一个存储为整数,另一个存储为数字: > dput(df1$DateInfo[1]) structure(16373, class = "Date") > dput(df2$DateInfo[1]) structure(16372L, class = "Date") 看起来,通过dplyr sql函数从数据库中提取的数据存储为数字,而来自csv的数据则作为整数存储。 我不知道为什么这不会让dplyr加入 ...

相关文章

更多

最新问答

更多
  • Android宽度:100%修复(网站接管问题)(Android width:100% fix (website takeover issue))
  • C ++函数/方法设计的良好实践(Good practice in C++ function/method design)
  • 计算其他表中不存在的所有记录 - SQL查询(Count all records that does not exist to other table - SQL Query)
  • 为什么我要用JPA共享ID?(Why do I get shared Ids with JPA?)
  • asp.net - 如何显示来自html格式的数据行的字段(asp.net - how to display a field from data row that is in html format)
  • 我们如何使用ActiveRecord从连接表中删除行?(How can we delete rows from a join table by using ActiveRecord?)
  • ng-class搞乱了类的顺序(ng-class messing with the order of classes)
  • oracle 12g无效数字错误(oracle 12g invalid number error)
  • 更改ng-src值onclick(Change ng-src value onclick)
  • 如何在android中自动添加自定义依赖项以创建新项目?(How to add custom dependencies automatically in android for ever a new project is created?)
  • datetime函数在PHP中(datetime function in php)
  • 在javascript中获取会话数组的值(in javascript get the value of a session array)
  • 如何在UTF8中编译LaTeX?(How can I compile LaTeX in UTF8? [closed])
  • Rspec:“array.should == another_array”,但不用担心订单(Rspec: “array.should == another_array” but without concern for order)
  • Logcat错误:无法在android片段中加载视图(Logcat error: unable to load view in android fragments)
  • JavaFX的。(JavaFX. Adding items to the list in different threads is not working)
  • 从GDATA日历资源迁移到Google Calendar Resource api(Migrate from GDATA calendar resource to Google Calendar Resource api)
  • SSRS 2008 - 以零情景处理分割(SSRS 2008 - Dealing with division by zero scenarios)
  • 我如何以编程方式添加一个listView列标题的点击事件(How can I add a listView column header a click event programmatically)
  • Wxpython:无法检索有关列表控件项XXX的信息(Wxpython: Couldn't retrieve information about list control item XXX)
  • 使用Tortoise SVN在SVN存储库中移动目录(Move Directory across SVN repository using Tortoise SVN)
  • 天蓝色服务结构集群中的web api无状态服务是否在一段时间不活动后进入休眠状态?(Do web api stateless services in azure service fabric cluster go to sleep after a period of inactivity?)
  • 我可以设置intelliJ来突出显示PHP编码风格吗?(Can I set intelliJ to highlight php coding style?)
  • 用javafx创建一个Truetype字体文件(Creating a Truetype Font file with javafx)
  • Spring ftp配置错误(Spring ftp configuration is wrong)
  • 使用gsub去除多个字符(Using gsub to strip multiple characters)
  • 续订推送证书并保持当前的App Store App正常工作(Renew Push certificate and keep current App Store App working)
  • js:ES5和ES6之间关于'this'关键字用法的一个令人困惑的观点(js: one confusing point about 'this' keyword usage between ES5 and ES6)
  • window.onload vs $(document).ready()(window.onload vs $(document).ready())
  • 在Swift中,如何声明一个符合一个或多个协议的特定类型的变量?(In Swift, how can I declare a variable of a specific type that conforms to one or more protocols?)