如何计算与 R 中相同列值关联的两行值的差值?
How do I calculate the difference of two row values associated with the same column value in R?
我有一个 R 问题。
我想计算与另一列中的相同 Record_ID
关联的两行值 sjc
是否有增加 (1)/减少 (0)?
这是生成数据框的代码:
df <- data.frame("Record_ID" = c(1, 1,2,2,3,3,4,4,5,5),
"sjc" = c(3,28,1,1,2,0,2,4,9,2))
原始数据框
这就是我想要的样子:
结果数据框
感谢您的帮助!
在 base R 中,我们可以使用 ave
,按 Record_ID
分组并检查 sjc
值的差异是否大于 0。
df$inc_dec <- with(df, ave(sjc, Record_ID, FUN = function(x) c(NA, diff(x) > 0)))
df
# Record_ID sjc inc_dec
#1 1 3 NA
#2 1 28 1
#3 2 1 NA
#4 2 1 0
#5 3 2 NA
#6 3 0 0
#7 4 2 NA
#8 4 4 1
#9 5 9 NA
#10 5 2 0
有了dplyr
,我们可以用lag
得到之前的值
library(dplyr)
df %>% group_by(Record_ID) %>% mutate(inc_dec = +(sjc - lag(sjc) > 0))
与 data.table
类似
library(data.table)
setDT(df)[, inc_dec := +(sjc - shift(sjc) > 0), Record_ID]
我有一个 R 问题。
我想计算与另一列中的相同 Record_ID
关联的两行值 sjc
是否有增加 (1)/减少 (0)?
这是生成数据框的代码:
df <- data.frame("Record_ID" = c(1, 1,2,2,3,3,4,4,5,5),
"sjc" = c(3,28,1,1,2,0,2,4,9,2))
原始数据框
这就是我想要的样子:
结果数据框
感谢您的帮助!
在 base R 中,我们可以使用 ave
,按 Record_ID
分组并检查 sjc
值的差异是否大于 0。
df$inc_dec <- with(df, ave(sjc, Record_ID, FUN = function(x) c(NA, diff(x) > 0)))
df
# Record_ID sjc inc_dec
#1 1 3 NA
#2 1 28 1
#3 2 1 NA
#4 2 1 0
#5 3 2 NA
#6 3 0 0
#7 4 2 NA
#8 4 4 1
#9 5 9 NA
#10 5 2 0
有了dplyr
,我们可以用lag
得到之前的值
library(dplyr)
df %>% group_by(Record_ID) %>% mutate(inc_dec = +(sjc - lag(sjc) > 0))
与 data.table
library(data.table)
setDT(df)[, inc_dec := +(sjc - shift(sjc) > 0), Record_ID]