2017-06-16 12 views
0

私はdata.tableリストを持っていて、いくつかの列を数値に変換してrowSumsを実行したいと思います。私はすべての列を数値に変換する方法を理解しようとしています。data.table list内の関数を複数の列に割り当てる方法は?

これは私が試みたものです。

# Obtain data 
tbl<-get_data(sqlquery = tqry, dbase=db1, server=serv) 

# Names of the columns that need to be converted to numeric 
score<-names(tbl)[grep('score',names(tbl),ignore.case = T)] 
tbl[,class(AcceptingNewPatientsScore)] 
[1] "character" 

### Wrong - Having problem here 
tbl[,eval(score):=as.numeric(get(score))] 

tbl[,class(AcceptingNewPatientsScore)] 
[1] "numeric" # It converted but jumbled scores. 

tbl[,tscore:=rowSums(.SD,na.rm = FALSE),.SDcols=score] 
+1

'x [grep(patt、x)]の代わりに' grep(patt、x、value = TRUE) 'を使うことができます。私は、あなたの問題は、必要がないときにevalのスコアを選ぶことによって引き起こされると思います。 '(score):='はうまくいくはずです...右側に複数のカラムがある場合は 'mget'を使います。数値への変換についてはhttps://stackoverflow.com/q/16846380/をご覧ください。 – Frank

答えて

1

@Frankの提案に感謝します。

tbl[,(score):=lapply(.SD, as.numeric),.SDcols=score] 
関連する問題