Как рассчитать разницу двух значений строки, связанных с одним и тем же значением столбца в R? - PullRequest
0 голосов
/ 02 марта 2020

У меня есть вопрос R.

Я хочу рассчитать, есть ли увеличение (1) / уменьшение (0) в двух значениях строки sjc, связанных с тем же Record_ID в другом столбце?

Это код для создания кадра данных:

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)) 

исходный кадр данных

enter image description here

И это Вот как я хочу, чтобы это выглядело:

Фрейм данных результатов

enter image description here

Я ценю помощь!

1 Ответ

0 голосов
/ 02 марта 2020

В базе 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]
...