2015-01-23 5 views
0

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

Образец данных:

df <- data.frame(ID = c("A", "B", "C", "D", "E"), X = c(10, 20, 15, 0, 15), Y = c(10, 0, 10, 15, 0), Z = c(0, 10, 10, 10, 0)) 

df 
    ID X Y Z 
1 A 10 10 0 
2 B 20 0 10 
3 C 15 10 10 
4 D 0 15 10 
5 E 15 0 0 

Мне нужно мутировать колонки:

  • X + Y
  • X + Z
  • Y + Z
  • X + Y + Z

Но мне нужны суммы в X + Y, чтобы быть 0/пустым, если есть не-нулей в X, Y и Z.

Так что для строки 3, X + Y + Z должен равняться 35, но X + Y должен равняться 0/пробелу.

ответ

0

Я решил эту проблему с помощью Грегора:

df1 <- df %>% 
    mutate(XY = ifelse(X != 0 & Y != 0 & Z == 0, X + Y, 0), 
    XZ = ifelse(X != 0 & Y == 0 & Z != 0, X + Z, 0), 
    YZ = ifelse(X == 0 & Y != 0 & Z != 0, Y + Z, 0), 
    XYZ = ifelse(X != 0 & Y != 0 & Z != 0, X + Y + Z, 0)) 

Спасибо!

1
df %>% mutate(c1 = ifelse(X != 0 & Y != 0 & Z != 0, 0, X + Y), 
       c2 = X + Z, 
       c3 = Y + Z, 
       c4 = X + Y + Z)