Есть ли быстрый способ запуска нескольких арифметических операций между переменными фрейма данных при игнорировании случаев с NA? Ниже я приведу простой пример.Как выполнять несколько операций, игнорируя NA, в R
Кажется, я могу добавить промежуточные переменные или выражения if, но это кажется слишком запутанным.
d1<-c(2,2,2,2)
d2<-c(1,1,1,1)
d3<-c(1,1,NA,NA)
df<-data.frame(d1,d2,d3)
df
d1 d2 d3
1 2 1 1
2 2 1 1
3 2 1 NA
4 2 1 NA
df$d4<-d1*((d2) + (d3))
df
d1 d2 d3 d4
1 2 1 1 4
2 2 1 1 4
3 2 1 NA NA
4 2 1 NA NA
То, что я хотел бы получить это:
df2<-data.frame(d1,d2,d3,d4=c(4,4,2,2))
df2
d1 d2 d3 d4
1 2 1 1 4
2 2 1 1 4
3 2 1 NA 2
4 2 1 NA 2
Я мог бы заменить все значения с 0s пока что также может ввести в заблуждение.
EDIT:
Я попытался преобразовать Nas в 0s, но он не работает, и я не понимаю, почему.
df<-data.frame(d1,d2,d3)
df
df[is.na(df)] <- 0
df
d1 d2 d3
1 2 1 1
2 2 1 1
3 2 1 0
4 2 1 0
df$d4<-d1*((d2) + (d3))
df
d1 d2 d3 d4
1 2 1 1 4
2 2 1 1 4
3 2 1 0 NA
4 2 1 0 NA
Может ли 'd1 * rowSums (df [-1], na.rm = TRUE)' –
Это не логика NA. Кажется, вы хотите, чтобы NA рассматривалось как 0, поэтому измените значения NA на 0. (в конечном итоге в копии вашего фрейма данных) – jogo
@DavidArenburg: я думал об этом, но он недостаточно общий, если мои другие переменные (те, что в rowSums) умножаются на дополнительные факторы или константы. – val