2016-11-18 10 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

最初に計算を実行して、1ステップで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] 
    })) 
) 
関連する問題