2016-08-14 5 views
1

私はいくつかのdata.tablesを持っています。各データテーブルには、〜4個のキー(列)と残りの値(カウント)列で構成される10個以上の列があります。ログファイルに印刷するときは、値を書式設定している間はそのまま印刷したいと思います。たとえば、formatting data.table出力

require(data.table) 
NF <- function(x) { return(format(x,big.mark=",",trim=TRUE,scientific=FALSE)) } 

dt <- data.table(c1=c("a","b"),c2=c("c","d"),c3=c("e","f"),c4=c(123456,432156), 
       c5=c(4839384,83473948)) 
cbind(dt[, 1:3, with=F], dt[, lapply(.SD,NF), .SDcols=4:5]) #desired output 

dtを呼び出して2回コールする必要はありません。私はフォーマットされた値 をdata.tableに保持したくありません。ログファイルのみです。私のテーブルは大きく、私はそれらをコピーしたくないです。

+0

なぜ、それらを「保持」しないのですか?後で ':= NULL 'で瞬時に削除することができます。そして、それがあなたのメモリの限界に迫っている場合(恐らくそうではないようです)、デフォルトで10行(上から5行)を出力するコンソール出力だけを見ているならば、 ... – Frank

+0

あなたの特定の例では、すべての数値列がフォーマットされているので、フォーマット関数を 'df [、lapply(.SD、NF)]'として_all_列に適用することができます。これはあなたの実際の問題では役に立たないかもしれません。その場合、例を更新して(つまり、フォーマットしたくない数値列を追加して)例を更新する必要があります。 – Jerzy

答えて

0

これは機能しますか?

#example data 
blah <- data.table(a=letters[1:10],b=letters[3:12],c=letters[5:14],d=c(1:7,12,32,13)*1000,e=c(1,5,6,7,8,3,2,5,1,4)*1000) 
#define key values 
indx<-c('a','b','c') 

write.csv(blah[,lapply(.SD, function(x) {format(x,big.mark = ',',trim=TRUE,scientific = FALSE)}),.SDcols=names(blah)[!names(blah)%in%indx],by=indx],file='yourfile.csv')