Как создать переменную, объясняющую разницу другой переменной в R? - PullRequest
2 голосов
/ 27 апреля 2020

Я пытаюсь создать переменную, которая express разница существующей переменной во времени. Я попытался создать это с помощью команды мутации, используя пакет dplyr, но безрезультатно, новая переменная сортируется по переменной страны. Другими словами, я прошу о помощи - это умение колонка «Мутированный» в приведенном ниже примере.

df2 <- read.table(
text =
"Year,Data,Country,Mutated,
1,3,US,NA,
2,4,US,1,
3,2,US,-2,
4,7,US,5,
5,4,US,-3,
1,3,UK,NA,
2,5,UK,2,
3,4,UK,-1,
4,3,UK,-1,
5,2,UK,-1,
", sep = ",", header = TRUE)
df2 

Любая помощь очень приветствуется!

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Использование data.table

library(data.table)
setDT(df2)[, M2 := fifelse(seq_len(.N) == 1, 0, Data - shift(Data)), Country]
1 голос
/ 27 апреля 2020

Если вы хотите рассчитать разницу значений данных для каждой страны во времени, вы можете использовать функцию lag следующим образом:

library(dplyr)

df2 %>% group_by(Country) %>%
  mutate(M2 = ifelse(row_number() == 1, 0, Data-lag(Data)))

# A tibble: 10 x 6
# Groups:   Country [2]
    Year  Data Country Mutated X        M2
   <int> <int> <fct>     <int> <lgl> <dbl>
 1     1     3 US           NA NA        0
 2     2     4 US            1 NA        1
 3     3     2 US           -2 NA       -2
 4     4     7 US            5 NA        5
 5     5     4 US           -3 NA       -3
 6     1     3 UK           NA NA        0
 7     2     5 UK            2 NA        2
 8     3     4 UK           -1 NA       -1
 9     4     3 UK           -1 NA       -1
10     5     2 UK           -1 NA       -1

Это то, что вы ищете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...