Как разделить строки в новом столбце на первую / предыдущую строку?

#r #rows #divide

#r #строки #разделить

Вопрос:

Я хотел бы создать два столбца:

  1. Что значение из следующей строки должно быть разделено на значение в первой строке.
  2. Для того, чтобы значение из следующей строки было разделено на значение из предыдущей строки и выражено в процентах.

Данные

 No    Value
1    10
2    15
3    5
4    10
5    40
  

Результат:

1.

 No    Value    V2
1    10    1
2    15    1,5
3    5     0,5
4    10    1
5    40    4
  

2.

 No    Value    V2    V4
1    10    1    100%
2    15    1,5    150%
3    5     0,5    33,33%
4    10    1    200%
5    40    4    400%
  

Ответ №1:

Один из вариантов

 library(dplyr)
df1 %>%
  mutate(V2 = Value/first(Value), 
      V4 = 100 * Value/lag(Value, default = first(Value)) )
#No Value  V2        V4
#1  1    10 1.0 100.00000
#2  2    15 1.5 150.00000
#3  3     5 0.5  33.33333
#4  4    10 1.0 200.00000
#5  5    40 4.0 400.00000
  

Ответ №2:

 cbind(df1,
      with(df1, {
          data.frame(V2 = Value/Value[1],
                     V4 = 100* c(1, tail(Value, -1)/head(Value, -1)))
      }))
#  No Value  V2        V4
#1  1    10 1.0 100.00000
#2  2    15 1.5 150.00000
#3  3     5 0.5  33.33333
#4  4    10 1.0 200.00000
#5  5    40 4.0 400.00000
  

Ответ №3:

Использование библиотек dplyr и scales ,

 data %>%
  mutate(V2 = Value / first(Value),
         V4 = scales::percent(Value / lag(Value)))

# A tibble: 5 x 4
     No Value    V2 V4   
  <dbl> <dbl> <dbl> <chr>
1     1    10   1   NA%  
2     2    15   1.5 150% 
3     3     5   0.5 33%  
4     4    10   1   200% 
5     5    40   4   400%