jon waterhouse
2012-Mar-06 20:15 UTC
[R] How to apply two parameter function in data frame
I know this is something simple that I cannot do because I do not yet "think" in R. I have a data frame has a variable participation (a factor), and several other factors. I want a chisq test (no contingency tables) for participation vs all of the other factors. In SPSS I would do: CROSSTABS /TABLES= (my other factors) BY participation /FORMAT=NOTABLES /STATISTICS=CHISQ /COUNT ROUND CELL. In R I have tried something like: mapply(chisq.test,participation,surv3[,names(surv3) %in% c('q10','q44')]) which should be effectively the same as chisq.test(participation,q10) chisq.test(participation,q44) except maybe I could store the results better.... but I get told that x and y are not the same length, and in this case, length() of the y argument is 2, which yes, is not the number of rows in the data frame. I'm not sure that it is mapply, rather than lapply that I want Thanks, Jon -- View this message in context: http://r.789695.n4.nabble.com/How-to-apply-two-parameter-function-in-data-frame-tp4451211p4451211.html Sent from the R help mailing list archive at Nabble.com.
David L Carlson
2012-Mar-06 22:26 UTC
[R] How to apply two parameter function in data frame
Try this.> set.seed(123) > a <- sample(letters[1:4], 250, replace=TRUE) > b <- sample(letters[1:4], 250, replace=TRUE) > c <- sample(letters[1:4], 250, replace=TRUE) > d <- sample(letters[1:4], 250, replace=TRUE) > e <- sample(letters[1:4], 250, replace=TRUE) > df <- data.frame(a, b, c, d, e) > result <- apply(df[,-1], 2, function(x) chisq.test(df$a, x)) > result$b Pearson's Chi-squared test data: df$a and x X-squared = 8.0032, df = 9, p-value = 0.5338 $c Pearson's Chi-squared test data: df$a and x X-squared = 7.8289, df = 9, p-value = 0.5515 $d Pearson's Chi-squared test data: df$a and x X-squared = 6.1221, df = 9, p-value = 0.7276 $e Pearson's Chi-squared test data: df$a and x X-squared = 6.6181, df = 9, p-value = 0.6768 ---------------------------------------------- David L Carlson Associate Professor of Anthropology Texas A&M University College Station, TX 77843-4352 -----Original Message----- From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of jon waterhouse Sent: Tuesday, March 06, 2012 2:16 PM To: r-help at r-project.org Subject: [R] How to apply two parameter function in data frame I know this is something simple that I cannot do because I do not yet "think" in R. I have a data frame has a variable participation (a factor), and several other factors. I want a chisq test (no contingency tables) for participation vs all of the other factors. In SPSS I would do: CROSSTABS /TABLES= (my other factors) BY participation /FORMAT=NOTABLES /STATISTICS=CHISQ /COUNT ROUND CELL. In R I have tried something like: mapply(chisq.test,participation,surv3[,names(surv3) %in% c('q10','q44')]) which should be effectively the same as chisq.test(participation,q10) chisq.test(participation,q44) except maybe I could store the results better.... but I get told that x and y are not the same length, and in this case, length() of the y argument is 2, which yes, is not the number of rows in the data frame. I'm not sure that it is mapply, rather than lapply that I want Thanks, Jon -- View this message in context: http://r.789695.n4.nabble.com/How-to-apply-two-parameter-function-in-data-fr ame-tp4451211p4451211.html Sent from the R help mailing list archive at Nabble.com. ______________________________________________ R-help at r-project.org mailing list 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.