For example, I have this data frame (df):
Color X1 X2 X3 X4
Red 1 1 0 2
Blue 0 NA 4 1
Red 3 4 3 1
Green 2 2 1 0
I would like to create a function that counts up the number of non-NAs in X2 as a function of color. I would like the output of this function in a new data frame named newdf. This is what I would like for output:
Color X2
Red 2
Blue NA
Green 1
So far, I have this code:
Question <- function(Color){
Result <-
rowsum((df[c("X2")] > 0) + 0, df[["X2"]], na.rm = TRUE)
rowSums(Result)[[Color]]
}
Question("Red")
The output this function gives is just Question("Red")= 2
and I would like to instead get my results of all the colors in a new data frame (newdf). Can anyone help with this? Thanks!
Or if you wanted to use data.table:
Also its easy enough to use an
ifelse()
in your data.table to get an NA for blue instead of 0. See:Data:
and if you really want
NA
instead of that0
thenWith base R we can use
aggregate
withna.action
parameter asna.pass
to allowNA
values