R dplyr разделить между двумя рядами после группы по - PullRequest
4 голосов
/ 09 апреля 2020

У меня есть такой фрейм данных:

x <- data.frame(
    name = rep(letters[1:4], each = 2),
    value = c(2,10,4,20,8,40,20,100)
)

Я хочу сгруппировать по имени, а затем разделить нижний ряд на верхний ряд.

результат должен выглядеть следующим образом:

  name divideValue
1    a           5
2    b           5
3    c           5
4    d           5

Спасибо!

Ответы [ 3 ]

2 голосов
/ 09 апреля 2020

Вы можете сделать:

x %>%
 group_by(name) %>%
 summarise(value = last(value)/first(value))

  name  value
  <fct> <dbl>
1 a         5
2 b         5
3 c         5
4 d         5
1 голос
/ 09 апреля 2020

Мы можем использовать data.table

library(data.table)
setDT(x)[, .(value =last(value)/first(value)) , name]

Или с dplyr

library(dplyr)
x %>% 
    group_by(name) %>% 
    summarise(value = value[n()]/value[1])

Или в base R

aggregate(value ~ name, x, FUN = function(x) tail(x, 1)/head(x, 1))
0 голосов
/ 09 апреля 2020

Другой вариант:

x %>%
  group_by(name) %>%
  summarise(value = Reduce(`/`, rev(value)))

Выход:

# A tibble: 4 x 2
  name  value
  <fct> <dbl>
1 a         5
2 b         5
3 c         5
4 d         5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...