Как разделить строки в новом столбце на первый / предыдущий ряд? - PullRequest
2 голосов
/ 08 марта 2019

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

  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%

Ответы [ 3 ]

3 голосов
/ 08 марта 2019

Один вариант:

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
3 голосов
/ 08 марта 2019
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
1 голос
/ 08 марта 2019

Использование библиотек 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% 
...