Please help: # I have a data frame x: x <- data.frame(a = c(1:3, NA), b = c(NA, 2:4)) # I run a cross-tab keeping NAs, like this: table(x[c("a", "b")], useNA = "ifany") # I want to reproduce it using xtabs, but it ignores NAs: xtabs(~ a + b, x) # I can't figure out how to force xtabs to include NAs. # All my attempts below fail to include NAs: xtabs(~ a + b, x, na.action(na.pass)) xtabs(~ a + b, x, na.action = "na.pass") xtabs(~ a + b, x, na.action(na.pass(x))) xtabs(~ a + b, x, exclude = NULL) Thank you for your hints! -- Dimitri Liakhovitski
Try both na.action=na.pass and exclude=NULL, the first is for xtabs' call to model.frame and the second for when it prepares the data from model.frame's output for a call to table. xtabs(formula = ~a + b, data = x, na.action = na.pass, exclude = NULL) Bill Dunlap TIBCO Software wdunlap tibco.com On Wed, Sep 30, 2015 at 7:56 AM, Dimitri Liakhovitski <dimitri.liakhovitski at gmail.com> wrote:> Please help: > > # I have a data frame x: > x <- data.frame(a = c(1:3, NA), b = c(NA, 2:4)) > > # I run a cross-tab keeping NAs, like this: > table(x[c("a", "b")], useNA = "ifany") > > # I want to reproduce it using xtabs, but it ignores NAs: > xtabs(~ a + b, x) > > # I can't figure out how to force xtabs to include NAs. > # All my attempts below fail to include NAs: > xtabs(~ a + b, x, na.action(na.pass)) > xtabs(~ a + b, x, na.action = "na.pass") > xtabs(~ a + b, x, na.action(na.pass(x))) > xtabs(~ a + b, x, exclude = NULL) > > Thank you for your hints! > -- > Dimitri Liakhovitski > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.
Thank you very much, Bill - it worked. Wow, that's very wordy! On Wed, Sep 30, 2015 at 11:09 AM, William Dunlap <wdunlap at tibco.com> wrote:> Try both na.action=na.pass and exclude=NULL, the first is for > xtabs' call to model.frame and the second for when it prepares > the data from model.frame's output for a call to table. > > xtabs(formula = ~a + b, data = x, na.action = na.pass, exclude = NULL) > Bill Dunlap > TIBCO Software > wdunlap tibco.com > > > On Wed, Sep 30, 2015 at 7:56 AM, Dimitri Liakhovitski > <dimitri.liakhovitski at gmail.com> wrote: >> Please help: >> >> # I have a data frame x: >> x <- data.frame(a = c(1:3, NA), b = c(NA, 2:4)) >> >> # I run a cross-tab keeping NAs, like this: >> table(x[c("a", "b")], useNA = "ifany") >> >> # I want to reproduce it using xtabs, but it ignores NAs: >> xtabs(~ a + b, x) >> >> # I can't figure out how to force xtabs to include NAs. >> # All my attempts below fail to include NAs: >> xtabs(~ a + b, x, na.action(na.pass)) >> xtabs(~ a + b, x, na.action = "na.pass") >> xtabs(~ a + b, x, na.action(na.pass(x))) >> xtabs(~ a + b, x, exclude = NULL) >> >> Thank you for your hints! >> -- >> Dimitri Liakhovitski >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code.-- Dimitri Liakhovitski