Перевод длинной формулы Excel в Dplyr - PullRequest
0 голосов
/ 21 февраля 2020

Это, наверное, очень нетрадиционный вопрос, но я в полном замешательстве. Я только что принял проект на работе от бывшего сотрудника, который делал все свои отчеты в Excel. Это привело к куче головных болей с испорченными рабочими книгами, а что нет. Я смог перевести почти все его формулы в некоторые dplyr-совместимые. За исключением этой одной проблемы:

=if (C3="Yes" ,if (B20>0, floor(B20/C4) + if (G3 <= mod(B20,C14), 1, ),),)

У кого-нибудь есть идеи? Я знаю, что это будет связано с case_when, но после этого я в тупике!

1 Ответ

1 голос
/ 21 февраля 2020

Вот пример, я использовал имя столбцов Excel для простоты.

library(dplyr)

df <- data.frame(
  C3 = c("Yes", "Yes", "Yes", "No"), 
  B20= c(10, 5, 0, 1), 
  G3 = c(1, 1, 20, 1),
  C4 = c(2, 5, 1, 1),  
  C14 = c(3, 5, 1, 1)
)

Что вам нужно сделать, это позвонить if_else() дважды. В дальнейшем я предполагаю, что значением по умолчанию является 0 (обратите внимание, что вместо него можно использовать NA). По сути, если бы было только первое утверждение, вы бы сделали:

df %>% mutate(EX = ifelse(C3 == "Yes", 1, 0))
   C3 B20 G3 C4 C14 EX
1 Yes  10  1  2   3  1
2 Yes   5  1  5   5  1
3 Yes   0 20  1   1  1
4  No   1  1  1   1  0

Но есть вторая часть, и вам нужно позвонить if_else() еще раз:

df %>% mutate(EX = if_else(
  C3 == "Yes", 
  if_else(B20>0, floor(B20/C4) + (G3<=(B20%%C14)), 0),
  0))
   C3 B20 G3 C4 C14 EX
1 Yes  10  1  2   3  6
2 Yes   5  1  5   5  1
3 Yes   0 20  1   1  0
4  No   1  1  1   1  0

%% соответствует mod в Excel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...