Tuesday 15 January 2013

r - Update data.table column changes data type -



r - Update data.table column changes data type -

i testing little scale scenario before rolling out in larger production environment , experiencing unusual occurrence.

i have 2 info sets:

dtl <- data.table(urn=c(1,2,3,4,5), donortype=c("cash","rg","emergency","emergency","cash")) dtl[,c("emergval","emergdate") := list(as.numeric(na),as.date(na))] setkey(dtl,urn) dtr <- data.table(urn = c(1,1,1,2,3,3 ,3 ,4,4, 4,4,5), class=c(5,5,5,1,5,40,40,5,40,5,40,5), xx= c(25,50,25,10,100,20,25,20,40,35,20,25), xdate=as.date(c("2013-01-01","2013-06-05","2014-05-27","2014-10-14", "2014-06-09","2014-04-07","2014-10-16", "2014-07-16","2014-10-21","2014-10-22","2014-09-18","2013-12-19"))) setkey(dtr,urn)

i wanting update dtl donortype equal "emergency", subset of records dtr. have seen update subset of data.table based on join , have used foundation solution.

dtl[dtr[class==40,list(maxxx=max(xx)),by=urn], emergval := ifelse(donortype=="emergency",i.maxxx,as.numeric(na))] dtl[dtr[class==40,list(maxdate=max(xdate)),by=urn], emergdate := ifelse(donortype=="emergency",as.date(i.maxdate),as.date(na)),nomatch=0]

i don't errors, when @ info in dtl has changed datatype emergdate num rather (i.e. date).

so 3 questions

why has changed info type (especially when date when first created in dtl, , tell set date in ifelse statement? how maintain date type when assign it? or have post assignment conversion/castint? is there clean way assignment of emergval , emergdate in single statement given don't have field donortype in dtr , don't want add together in (so can't utilize multiple key join)?

r join data.table subset

No comments:

Post a Comment