#r #rows #divide
#r #строки #разделить
Вопрос:
Я хотел бы создать два столбца:
- Что значение из следующей строки должно быть разделено на значение в первой строке.
- Для того, чтобы значение из следующей строки было разделено на значение из предыдущей строки и выражено в процентах.
Данные
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%