如何用 data.table 的每个变量计数编写 CSV?
How to write CSV with per-variable counts of a data.table?
假设我有一个数据 table,td
,维度为 1000x4,列名为 x1,x2,x3,x4
。如果我这样做 td[,.N,x1]
我将获得 x1
变量的每个值的计数。
我想做的是一次性将所有这些值写入一个 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 ...
有什么想法吗?
您必须使用 write.table(..., append=TRUE)
因为 write.csv()
包装器不会通过它(!)
然后(如果您不想在每个变量部分之前使用 per-variable header,请使用 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)
})
我们可以使用 for
循环
for(val in x) {
write.table(td[, .N, by = c(val)], file = "test.csv", append=TRUE)
}
您还可以使用来自 data.table:
的 rbindlist
write.csv(
file = "./tmp.csv",
x = rbindlist(lapply(x,function(y){
dt[,.N,by = y]
}))
)
假设我有一个数据 table,td
,维度为 1000x4,列名为 x1,x2,x3,x4
。如果我这样做 td[,.N,x1]
我将获得 x1
变量的每个值的计数。
我想做的是一次性将所有这些值写入一个 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 ...
有什么想法吗?
您必须使用 write.table(..., append=TRUE)
因为 write.csv()
包装器不会通过它(!)
然后(如果您不想在每个变量部分之前使用 per-variable header,请使用 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)
})
我们可以使用 for
循环
for(val in x) {
write.table(td[, .N, by = c(val)], file = "test.csv", append=TRUE)
}
您还可以使用来自 data.table:
的 rbindlistwrite.csv(
file = "./tmp.csv",
x = rbindlist(lapply(x,function(y){
dt[,.N,by = y]
}))
)