[R] Help with loop
Rui Barradas
ruipbarradas at sapo.pt
Wed Jul 11 23:57:36 CEST 2012
Hello,
A one-liner could be
df1 <- read.table(text="
cola colb colc cold cole
1 NA 5 9 NA 17
2 NA 6 NA 14 NA
3 3 NA 11 15 19
4 4 8 12 NA 20
", header=TRUE)
df2 <- read.table(text="
cola colb colc cold cole
1 1.4 0.8 0.02 1.6 0.6
", header=TRUE)
sapply(names(df1), function(nm) {df1[[nm]][is.na(df1[[nm]])] <-
df2[[nm]]; df1[[nm]]})
Avoid loops, use *apply.
Hope this helps,
Rui Barradas
Em 11-07-2012 15:11, paulalou escreveu:
> Hi,
>
> I have two dataframes:
>
> The first, df1, contains some missing data:
>
> cola colb colc cold cole
> 1 NA 5 9 NA 17
> 2 NA 6 NA 14 NA
> 3 3 NA 11 15 19
> 4 4 8 12 NA 20
>
> The second, df2, contains the following:
>
> cola colb colc cold cole
> 1 1.4 0.8 0.02 1.6 0.6
>
> I'm wanting all missing data in df1$cola to be replaced by the value of
> df2$cola. Then the missing data in df1$colb to be replaced with the
> corresponding value in df2$colb etc.
>
> I can get this to work column by column with single input lines but as my
> original dataset is a lot larger I'm wanting a create a loop but can't work
> out how.
>
> The single line command is:
>
> df1$cola[is.na(df1$cola)]<-df2$cola
>
> I've tried a replace function within a loop but get error messages:
>
> list<-colnames(df1)
>
> for (i in list) {
> r<-replace(df1$i,df1$i[is.na(df1$i)],df2$i)
> }
>
>
> with error messages of:
>
> Warning messages:
> 1: In is.na(mymat$snp) :
> is.na() applied to non-(list or vector) of type 'NULL'
>
> Can anyone help me with this?
>
> Thanks
>
> --
> View this message in context: http://r.789695.n4.nabble.com/Help-with-loop-tp4636140.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.
>
More information about the R-help
mailing list