Числовая разница между всеми строками в группе в R - PullRequest
0 голосов
/ 24 марта 2020

У меня есть , который немного похож на

Indices<-data.frame("Animal"=c("Cat", "Cat", "Cat", "Dog", "Dog", "Dog", "Dog", "Bird", 
                    "Bird"), "Trend"=c(1,3,5,-3,1,2,4,2,1), "Project"=c("ABC", "ABC2",
                    "EDF", "ABC", "EDF", "GHI", "ABC2", "ABC", "GHI"))

Я хочу выяснить, отличаются ли две или более оценки тренда на >= 3 в каждой группе животных. Я попытался использовать mutate и lag:

    Indices %>%
      group_by(CommonName) %>%
      mutate(Diff = Trend - lag(Trend))

Но это только показывает разницу между строками, расположенными сразу друг за другом, и я пытаюсь увидеть разницу между всеми строками в группе. Это также дает мне различия, но не говорит мне, если значение >=3.

Я бы предпочел, чтобы конечный результат представлял собой список животных и названий проектов с абсолютной разницей в тенденциях >=3.

Animal     TrendDiff     Projects
Cat            4          ABC-EDF
Dog            7          ABC-ABC2
Dog            3          ABC2-EDF
Dog            4          ABC-EDF
Dog            5          ABC-GHI

У меня более 200 различных "животных" "групп и более 400 строк, поэтому они должны быть такими, чтобы не указывать каждую строку. Я все еще очень плохо знаком с , поэтому, пожалуйста, уточните c с вашими ответами. Спасибо!

1 Ответ

1 голос
/ 24 марта 2020

Один из подходов - left_join ваш Indices data.frame с самим собой

library(dplyr)
Indices %>% 
      left_join(Indices, by = "Animal") %>%
      filter(Project.x != Project.y) %>%
      mutate(TrendDiff = Trend.x - Trend.y) %>% 
      filter(TrendDiff >= 3) 

# A tibble: 5 x 6
# Groups:   Animal [2]
# Animal  Trend.x  Project.x Trend.y Project.y  TrendDiff
# cat          5   EDF             1 ABC               4
# Dog          1   EDF            -3 ABC               4
# Dog          2   GHI            -3 ABC               5
# Dog          4   ABC2           -3 ABC               7
# Dog          4   ABC2            1 EDF               3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...