我在data.tables和其他一些data.tables中有多個海量數據集,其中包含我想要對其執行的基本表達式使用類似:=
的東西。如何使用變量表達式添加/更改多個data.table列
的樣本數據:
library(data.table)
tt = data.table(date=c(2011, 2012, 2013, 2014), count=c(2774343,4655434,648113695, 357733805))
date count
1: 2011 2774343
2: 2012 4655434
3: 2013 648113695
4: 2014 357733805
樣品轉換表。某些列可能是新的,其他列可能正在修改預先存在的列。我需要他們充分利用'with'功能,這意味着他們需要參考現有的列,即使他們正在創建新的列。
xform=data.table(var=c("date2", "count2"), val=c("date - 2000", "count/1000"))
var val
1: date2 date - 2000
2: count2 count/1000
我只是無法想象得到這個工作的神奇公式。我已經嘗試過使用:=
的[.data.table
裏的lapply,parse,eval等等各種組合。
我最後的希望是這樣的:
> xform[,expr := lapply(val, FUN=function(x) parse(text=x))]
> tt[,(xform$var) := eval(xform$expr)]
Error in eval(expr, envir, enclos) : attempt to apply non-function
訣竅是我輸入的數據是海量的,包含多達100列,而一些轉換的可能是微不足道的,其他人可能是複雜的。
在這種情況下,輸出應該是這樣的:
date count date2 count2
1: 2011 2774343 11 2774.343
2: 2012 4655434 12 4655.434
3: 2013 648113695 13 648113.695
4: 2014 357733805 14 357733.805
在此先感謝您的幫助!
我只設法使用一個表達式來工作,例如'xform = data.table(var =「date2」,val =「date - 2000」); tt [,xform $ var:= eval(parse(text = xform $ val))]' –
我也試過!由於解析不能列表,我正在分別嘗試lapply(val,parse)和eval階段;我想我可能會碰到'[.data.table'和':='的一些內部邏輯,但我無法想象出什麼。 –