2016-11-18 4 views
1

데이터 표가 td이고 크기가 1000x4이고, 열 이름이 x1,x2,x3,x4 인 것으로 가정합니다. td[,.N,x1]을 입력하면 x1 변수의 각 값에 대한 개수가 계산됩니다. 내가하고 싶은 무엇data.table의 변수 당 개수로 CSV를 작성하는 방법은 무엇입니까?

는 한 가지, 서로 아래 에서 CSV에서 모든 값을 작성하는 것입니다, 그래서

x <- c("x1","x2","x3","x4") l_ply(x, function(x) { write.csv(td[,.N,by=x],file="test.csv") } 

을 시도하지만 오류 얻을 :

The items in the 'by' or 'keyby' list are length .... Each must be same length as rows in x or number of rows returned by i ...

아이디어가 있으십니까? (!)

+1

당신이'write.csv'를 사용하는 경우,'= TRUE '를 추가, 또한 = 의해'c' 즉'로 포장 될 수있다 C (X)]' – akrun

+0

먼저 계산을 수행하고 한 번에 csv에 저장하는 것이 어떻습니까? – konvas

+1

'write.csv (..., append = TRUE)'append '를 "*"설정하려고 시도하면 실패합니다. 'write.table (..., append = TRUE) '를 사용해야합니다. – smci

답변

1

당신은 write.csv() 래퍼 그런

를 통해 통과하지 않기 때문에 write.table(..., append=TRUE)를 사용해야합니다 (각 변수의 섹션 전에 당 변수 헤더를 원하지 않는 경우, col.names=F을 사용합니다 Write column header once only, when writing data with write.table(append=T) 참조) :

require(data.table) 
require(plyr) 
x <- c("x1","x2","x3","x4") 
td <- data.table(x1=sample.int(2,5,replace=T), x2=sample.int(2,5,replace=T), x3=sample.int(2,5,replace=T), x4=sample.int(2,5,replace=T)) 

l_ply(x, function(x) { 
    write.table(td[,.N,by=x], file="test.csv", append=T, quote=F, row.names=F) 
}) 
0

우리는 당신을 수 for 루프

for(val in x) { 
    write.table(td[, .N, by = c(val)], file = "test.csv", append=TRUE) 
} 
+0

작동하지 않는다.'write.csv (..., append = TRUE)'는 '설정 시도'가 '무시'로 끝나고 실패한다. 추가하려는 경우'write.table()'을 사용해야합니다. – smci

+0

@smci mine은'write.table'입니다. 수정했습니다. – akrun

+0

Uhuh입니다. 'write.csv (append = T)'가 어떻게 작동했는지 궁금합니다. – smci

0

를 사용할 수 있습니다 또한 data.table에서 rbindlist를 사용

write.csv(
    file = "./tmp.csv", 
    x = rbindlist(lapply(x,function(y){ 
     dt[,.N,by = y] 
    })) 
)