2016-08-14 4 views
1

나는 ~ 4 개의 키 (열)와 나머지 값 (개수) 열로 구성된 10 개 이상의 열이있는 몇 개의 data.tables가 있습니다. 로그 파일에 인쇄 할 때 값을 형식화해야하는 동안 그대로 키를 인쇄하고 싶습니다. 예를 들어formatting data.table output

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를 호출하고 두 번 호출하지 않고도이 코드를 작성할 수 있습니까? data.table에 형식화 된 값 을 유지하고 싶지 않습니다. 로그 파일 전용입니다. 테이블이 너무 커서 복사하지 않는 것이 좋습니다.

+0

왜 "유지"하지 않습니까? 그 후에': = NULL '을 사용하여 즉시 삭제할 수 있습니다. 그리고 메모리 제한 (가능성은 희박함)이 부각되면 콘솔 출력을보고 있으면 기본적으로 10 개의 행 (위쪽과 아래쪽에서 5 개)을 인쇄하는 경우 모든 행의 서식을 실제로 지정하지 않아도됩니다. ... – Frank

+0

특정 예제에서 모든 숫자 열은 형식이 지정되어 있으므로 형식 함수를 _all_ 열에'df [, lapply (.SD, NF)] '형식으로 적용하면됩니다. 이는 실제 문제에 도움이되지 않을 수 있습니다.이 경우이를 반영하기 위해 예제를 업데이트해야합니다 (예 : 서식을 지정하지 않으려는 숫자 열을 추가). – 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')