Удаление NA при умножении столбцов - PullRequest
3 голосов
/ 13 марта 2012

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

Df.1 <- data.frame(A = c(5,4,7,6,8,4),B = (c(1,5,2,4,9,1)),C=(c(2,3,NA,5,NA,9)))

То, что я хочу сделать, это создать дополнительный столбец, который является умножением A, B и C, который я затем свяжу с исходным кадром данных.

Итак, я бы обычно использовал:

attach(Df.1)
D<-A*B*C

Но, очевидно, где NA находятся в столбце C, я получаю NA в переменной D. Я не хочу исключать все строки NA, а просто игнорирую значения NA в этом столбце (и тогда значение в D будет просто быть умножением A и B, или где C был доступен, A * B * C.

Я знаю, что мог бы просто заменить NA на 1, чтобы вычисление оставалось неизменным, или использовать операторы if, но я размышлял над тем, как это проще всего сделать?

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 13 марта 2012

Вы можете использовать prod с аргументом na.rm. Чтобы сделать это по строке, используйте apply:

apply(Df.1,1,prod,na.rm=TRUE)
[1]  10  60  14 120  72  36
2 голосов
/ 13 марта 2012

Как сказал @James, prod и apply будут работать, но вам не нужно тратить память, храня ее в отдельной переменной или даже связывая ее

Df.1$D = apply(Df.1, 1, prod, na.rm=T)

Назначение новой переменной непосредственно во фрейме данных будет работать.

> Df.1 <- data.frame(A = c(5,4,7,6,8,4),B = (c(1,5,2,4,9,1)),C=(c(2,3,NA,5,NA,9)))
> Df.1
  A B  C
1 5 1  2
2 4 5  3
3 7 2 NA
4 6 4  5
5 8 9 NA
6 4 1  9
> Df.1$D = apply(Df.1, 1, prod, na.rm=T)
> Df.1$D
[1]  10  60  14 120  72  36
> Df.1
  A B  C   D
1 5 1  2  10
2 4 5  3  60
3 7 2 NA  14
4 6 4  5 120
5 8 9 NA  72
6 4 1  9  36
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...