R:功能“差异”在不同群体(R: Function “diff” over various grou

2019-10-30 11:05发布

虽然寻找一个解决我的问题,我发现这个线程: 功能“差异”在R中不同群体 。 我有一个非常类似的问题,所以我能跟那儿的例子工作。

这就是我想要的输出应该是这样的:

name class year diff
1    a    c1   2009  NA      
2    a    c1   2010   67
3    b    c1   2009  NA
4    b    c1   2010   20

我有形成亚两个变量 - 类和名称。 所以我想仅比较具有相同的名称和类中的值。 我也希望有从2009年到2010年的差异如果没有2008年,2009年差异应该返回NA(因为它不能计算差)。

我敢肯定,它的工作原理非常类似于其他线程,但我不能让它工作。 我用这个代码太(和简单地通过不同的排序数据解决升序年),但不知何故,[R仍设法计算的差,并没有返回NA。

ddply(df, .(class, name), summarize, year=head(year, -1), value=diff(value))

Answer 1:

使用dplyr

  df %>% 
  filter(year!=2008)%>% 
  arrange(name, class, year)%>%
  group_by(class, name)%>%
  mutate(diff=c(NA,diff(value)))
  # Source: local data frame [12 x 5]
  #  Groups: class, name

  #     name class year value diff
  #  1     a    c1 2009    33   NA
  #  2     a    c1 2010   100   67
  #  3     a    c2 2009    80   NA
  #  4     a    c2 2010    90   10
  #  5     a    c3 2009    90   NA
  #  6     a    c3 2010   100   10
  #  7     b    c1 2009    80   NA
  #  8     b    c1 2010    90   10
  #  9     b    c2 2009    90   NA
  #  10    b    c2 2010   100   10
  #  11    b    c3 2009    80   NA
  #  12    b    c3 2010    99   19

更新:

With relative difference
 df %>%
 filter(year!=2008)%>% 
 arrange(name, class, year)%>%
 group_by(class, name)%>%
 mutate(diff1=c(NA,diff(value)), rel_diff=round(diff1/value[row_number()-1],2))


Answer 2:

使用数据集形成其他职位,我会做类似

library(data.table)
df <- df[df$year != 2008, ]
setkey(setDT(df), class, name, year)
df[, diff := lapply(.SD, function(x) c(NA, diff(x))), 
              .SDcols = "value", by = list(class, name)]

返回

df
#    name class year value diff
# 1:    a    c1 2009    33   NA
# 2:    a    c1 2010   100   67
# 3:    b    c1 2009    80   NA
# 4:    b    c1 2010    90   10
# 5:    a    c2 2009    80   NA
# 6:    a    c2 2010    90   10
# 7:    b    c2 2009    90   NA
# 8:    b    c2 2010   100   10
# 9:    a    c3 2009    90   NA
#10:    a    c3 2010   100   10
#11:    b    c3 2009    80   NA
#12:    b    c3 2010    99   19


文章来源: R: Function “diff” over various groups
标签: r diff plyr