我正在尝试使用"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]
,但前提是您确定您的数据已经按正确的顺序排列!