[R] replacing Na's with values on different records

arun smartpink111 at yahoo.com
Mon Sep 9 18:49:33 CEST 2013


Hi,
Please ?dput() your example dataset.  Not sure this helps or not.
u3s<- read.table(text="Current-ID visit AUC Wight ID1
101 3 . . 1
101 4 10 13 2
101 5  . . 3
102 3 .  . 4
102 4 4 10 5
102 5 . . 6
103 3 . . 7
103 4 6 9 8
103 5 . . 9",sep="",header=TRUE,na.strings=".",check.names=FALSE) 

u3d<- read.table(text="Desired-ID visit AUC Wight ID1
101 3 5 13 1
101 4 10 13 2
101 5 20 13 3
102 3 2 10 4
102 4 4 10 5
102 5 8 10 6
103 3 3 9 7
103 4 6 9 8
103 5 12 9 9",sep="",header=TRUE,check.names=FALSE)

 u3s1<-unsplit(lapply(split(u3s,u3s$`Current-ID`),function(x) {(x$AUC<-as.integer(x$AUC[!is.na(x$AUC)]/2)* (2^(0:floor(log(4,2))))); x$Wight<- x$Wight[!is.na(x$Wight)];x }),u3s$`Current-ID`)

attr(u3s1,"row.names")<- attr(u3d,"row.names")
colnames(u3s1)<- colnames(u3d)
all.equal(u3s1,u3d)
#[1] TRUE

A.K.


I'm sure I'm missing something really obvious in the "for loop"... 

Here is simplified data for 3 patients, we need filling in Na's 
with same WT for each patient, AUC halved for visit 3, doubled for visit
 5 for the same patient, based on visit 4 


for(i in unique(u3s$ID)){                             #fill in same Wt for each patient 
  u3s$WT <- ifelse(is.na(u3s$WT),u3s$WT[u3s$visit == "4"],u3s$WT) 

  for(j in length(u3s$ID1)){                        #fill in .5 AUC for visit 3, 2*AUC for visit 5 

    u3s$AUC24 <- ifelse(is.na(u3s$AUC24),u3s$AUC24[u3s$visit == "4"]*0.5,u3s$AUC24) 
    u3s$AUC24 <- ifelse(!is.na(u3s$AUC24),u3s$AUC24[u3s$visit == "4"]*1.0,u3s$AUC24) 
    u3s$AUC24 <- ifelse(is.na(u3s$AUC24),u3s$AUC24[u3s$visit == "4"]*2.0,u3s$AUC24) 
  } 
} 

Current- 
ID 

visit 

AUC 

Wight 

ID1 

101 

3 





1 

101 

4 

10 

13 

2 

101 

5 





3 

102 

3 





4 

102 

4 

4 

10 

5 

102 

5 





6 

103 

3 





7 

103 

4 

6 

9 

8 

103 

5 





9 


Desired- 

ID 

visit 

AUC 

Wight 

ID1 

101 

3 

5 

13 

1 

101 

4 

10 

13 

2 

101 

5 

20 

13 

3 

102 

3 

2 

10 

4 

102 

4 

4 

10 

5 

102 

5 

8 

10 

6 

103 

3 

3 

9 

7 

103 

4 

6 

9 

8 

103 

5 

12 

9 

9 



Your help is greatly appreciated... 


Best Regards



More information about the R-help mailing list