1

1 つの BIG ファイル (>10000 行のデータ) があり、ID ごとに別のファイルを書き出す必要があります。50 の一意の ID 名があり、それぞれに個別のテキスト ファイルが必要です。これが私がこれまでに得たものであり、エラーが発生し続けています。私のIDは実際には文字列であり、その文字列に基づいて各ファイルに名前を付けることができればそれが最善です。

for (i in 1:car$ID) {
    a <- data.frame(car[,i])
    carib <- car1[,(c("x","y","time","sd"))]
    myfile <- gsub("( )", "", paste("C:/bridge", carib, "_", i, ".txt"))
    write.table(a, file=myfile,
                sep="", row.names=F, col.names=T quote=FALSE, append=FALSE) 
}
4

2 に答える 2

2

1つのアプローチは、plyrパッケージとd_ply()関数を使用することです。d_ply()入力としてdata.frameが必要です。また、互いに独立して操作するために、そのdata.frameをスライスおよびダイスする列を指定します。この場合、列IDがあります。この特定の関数はオブジェクトを返さないため、プロットしたり、チャーターを繰り返し作成したりするのに役立ちます。以下に、小さな実用的な例を示します。

library(plyr)

dat <- data.frame(ID = rep(letters[1:3],2) , x = rnorm(6), y = rnorm(6))

d_ply(dat, "ID", function(x)
     write.table(x, file = paste(x$ID[1], "txt", sep = "."), sep = "\t", row.names = FALSE))

ファイルの名前(a.txt、b.txt、c.txt)としてID列を持つ3つのタブ区切りファイルを生成します。

編集-フォローアップの質問に対処する

に渡す前に、いつでも必要な列をサブセット化できますd_ply()。または、演算子を使用/乱用して[、呼び出し自体の中で必要な列を選択することもできます。

dat <- data.frame(ID = rep(letters[1:3],2) , x = rnorm(6), y = rnorm(6)
  , foo = rnorm(6))

d_ply(dat, "ID", function(x)
     write.table(x[, c("x", "foo")], file = paste(x$ID[1], "txt", sep = ".")
     , sep = "\t", row.names = FALSE))
于 2011-04-16T00:41:15.820 に答える
2

mtcarsで区切られたデータフレームの場合mtcars$cyl:

lapply(split(mtcars, mtcars$cyl), 
   function(x)write.table(x, file = paste(x$cyl[1], ".txt", sep = "")))

これにより、対応するデータとともに「4.txt」、「6.txt」、「8.txt」が生成されます。サブセット化 (分割) はベクトル化されるため、これはループ/サブセット化よりも高速です。

于 2011-04-16T03:28:41.040 に答える