[R] y2z question (AGD)
Martin Canon
martin.canon at gmail.com
Mon Oct 26 12:52:31 CET 2015
Thank you, David.
This solves the problem.
Regards,
Martin
On Sun, Oct 25, 2015 at 12:53 PM, David L Carlson <dcarlson at tamu.edu> wrote:
> It looks like the y2z() function strips NA's so that the vector lengths do
> not match any longer. The simplest workaround is to remove the NA's. You
> could do that by using data2 <- na.omit(data) to strip the observations
> with NA if they will not be used in the rest of the analysis.
>
> If you want to preserve the NAs in the data frame, this seems to work:
>
> > nomiss <- complete.cases(data)
> > data$zeta[nomiss] <- with(data[nomiss, ], y2z(weight, age/12, sex,
> ref=who.wgt))
> > data
> sex weight age zeta
> 1 M 8.5 8 -0.124
> 2 M 8.2 9 -0.751
> 3 M 9.0 12 -0.635
> 4 F NA 9 NA
> 5 M 5.8 1 2.002
>
>
> David L. Carlson
> Department of Anthropology
> Texas A&M University
>
>
>
> -----Original Message-----
> From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of Martin
> Canon
> Sent: Sunday, October 25, 2015 7:03 AM
> To: R help <r-help at r-project.org>
> Subject: [R] y2z question (AGD)
>
> Hi to all.
>
> I've been trying to calculate weight-for-age z-scores with the y2z
> command (AGD package).
>
> However, I keep getting strange results.
>
> My hypothesis is that missings are the problem.
>
> My dataframe looks like this:
>
> data <- structure(list(sex = structure(c(3L, 3L, 3L, 2L, 3L), .Label =
> c("",
> "F", "M"), class = "factor"), weight = c(8.5, 8.2, 9, NA, 5.8),
> age = c(8, 9, 12, 9, 1)), .Names = c("sex", "weight", "age"
> ), class = "data.frame", row.names = c(NA, 5L))
>
> Weight is in kg and age in months.
> I will use WHO curves for children younger than 2 years of age.
>
> z-score calculation:
>
> library(AGD)
> data$zeta <- y2z(y = data$weight, x = data$age/12, sex = data$sex,
> ref = get("who.wgt"))
>
> I get:
>
> Warning message:
> In `split<-.default`(`*tmp*`, f, drop = drop, value = value) :
> number of items to replace is not a multiple of replacement length
>
> data$zeta
> [1] NA NA NA -0.124 NA
>
> However a for loop seems to work.
>
> for (i in 1:5) {
>
> data$zeta[i] <- y2z(y = data$weight[i],
> x = data$age[i]/12,
> sex = data$sex[i],
> ref = get("who.wgt"))
> }
>
> data$zeta
> [1] -0.124 -0.751 -0.635 NA 2.002
>
> Is there a workaround so that I don't have to use a for loop?
> na.action doesn't work either.
>
> Thanks.
>
>
> Martin
>
> ______________________________________________
> 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.
>
[[alternative HTML version deleted]]
More information about the R-help
mailing list