Расчет условного преобразования столбца для создания нового кода столбца с помощью dplyr

Я работаю с временным рядом с несколькими тысячами строк, но вот небольшая выборка из двух столбцов, о которых я хочу поговорить:

data <- data.frame(
        Precipitation = sample(c("0.12", "0.14", "0.08", "0.30", "0.10", "0.40", "1.6", "0", "0")),
        Character = sample(c("A", "B", "C", "D", "E", "F", "G", "H", "I")))

Каждое значение в столбце «Осадки» соответствует букве в столбце «Символ» (например, 0,12 -> A, 0,14 -> B и т. Д.).

Каждая из этих букв представляет собой потенциальное «изменение», которое необходимо внести в значения в столбце «Осадки», а именно:

  • Значения осадков, обозначенные буквой A, допустимы как есть.
  • Значения осадков с буквой B необходимо разделить на 2.
  • Значения осадков с буквой C необходимо разделить на 3.
  • Значения осадков с буквой D нужно разделить на 4.
  • Значения осадков с буквой E необходимо разделить на 2.
  • Значения осадков, обозначенные буквой F, необходимо разделить на 4.
  • Значения осадков с буквой G необходимо разделить на 4.
  • Значения осадков, обозначенные буквой H, допустимы как есть.
  • Осадки, оцененные буквой I, допустимы как есть

Теперь я хочу создать новый столбец, используя dplyr, чтобы сделать деления, отмеченные столбцом «Символ», на столбец «Осадки», а также перенести соответствующие строки A, H и I, которые не требуют каких-либо изменений. Как будет выглядеть код для этого?

Спасибо за помощь! Это очень ценится.


person SecretBeach    schedule 14.12.2018    source источник
comment
Что ты пробовал? Вы можете посмотреть case_when в dplyr   -  person Calum You    schedule 15.12.2018
comment
@CalumYou Я не знаю, как подойти к этому с точки зрения кода, поэтому я ищу кого-нибудь, кто поможет мне с примером. :)   -  person SecretBeach    schedule 15.12.2018
comment
см. case_when (rdocumentation.org/packages/dplyr/versions/0.7 .8 / themes /)   -  person DJV    schedule 15.12.2018


Ответы (1)


Что-то вроде этого? Он использует case_when в dplyr

library(tidyverse)
data <- tibble(
  Precipitation = sample(c(0.12, 0.14, 0.08, 0.30, 0.10, 0.40, 1.6, 0, 0)), 
  Character = sample(c("A", "B", "C", "D", "E", "F", "G", "H", "I")))

Я предполагаю, что ваши числа осадков были для меня числами, а не символами или факторами, поэтому без кавычек.

data2 <- data %>% 
  mutate(new = case_when(Character == "B" ~ Precipitation/2,
                         Character == "C" ~ Precipitation/3,
                         Character == "D" ~ Precipitation/4,
                         Character == "E" ~ Precipitation/2,
                         Character == "F" ~ Precipitation/4,
                         Character == "G" ~ Precipitation/4,
                         TRUE ~ Precipitation)) 

Все, что не находится в диапазоне от «B» до «G», обозначается знаком TRUE и является исходным значением (осадки).

# A tibble: 9 x 3
  Precipitation Character   new
          <dbl> <chr>     <dbl>
1          0.12 F         0.03 
2          0.4  H         0.4  
3          0.3  B         0.15 
4          0.08 E         0.04 
5          0    I         0    
6          0.14 D         0.035
7          1.6  G         0.4  
8          0    C         0    
9          0.1  A         0.1
person william3031    schedule 15.12.2018