R ddply 函数每两行中的差异表示不同的年份

  • 本文关键字:表示 两行 函数 ddply r
  • 更新时间 :
  • 英文 :


我正在尝试使用"ddply"函数来计算代表两个不同年份的连续两行的差异。 数据集如下所示

year ID value
1 2005  A    10
2 2015  A    20
3 2005  B    25
4 2015  B     5
5 2005  C    10
6 2015  C    15

我正在使用如下函数

ddply(df, "ID",  function(x) (x[2,] - x[1,]))

但是,似乎我的函数中犯了一个错误,因为差值是为变量(包括非数字变量)计算的。我得到以下结果。

year ID value
1   10 NA    10
2   10 NA   -20
3   10 NA     5

我知道解决方案可能很简单。我希望得到以下总结结果。

 ID  change
 A    10
 B    -5 
 C     5

有谁知道如何使用"ddply"或任何其他功能来实现这一点?

这里有多个选项,但我不确定你的愿望输出..它似乎包含一个错误? B应该-20

示例数据

library( data.table)
data <- fread("year ID value
2005  A    10
2015  A    20
2005  B    25
2015  B     5
2005  C    10
2015  C    15", header = TRUE, stringsAsFactor = FALSE)
dt <- data
df <- as.data.frame( data )

数据表。

library(data.table)
dt[, list( delta = value[year == 2015] - value[year == 2015] ), by = .(ID)][]
#    ID delta
# 1:  A    10
# 2:  B   -20
# 3:  C     5

德普利尔

library( dplyr )
df %>% group_by( ID ) %>% summarise( delta = value[year == 2015] - value[year == 2005])
# A tibble: 3 x 2
#   ID    delta
#   <chr> <int>
# 1 A        10
# 2 B       -20
# 3 C         5

在这两种方法中,您都可以将value[year == 2015] - value[year == 2015]替换为 value[2] - value[1] ,但前提是您确定您的数据已经按正确的顺序排列!

最新更新