我正在尝试使用“ 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”或其他任何功能来实现这一目标吗?
答案 0 :(得分:0)
这里有多个选项,但是我不确定您的期望输出..它似乎包含错误? 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 )
data.table
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
dplyr
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]
,但前提是要确保您的数据已经按照正确的顺序排列!