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