0

私はこのスクリプトを持っています:

dat <- read.csv(file="Task_vs_Files_Whirr2.csv", header=T, sep=",",
                row.names=1) 
(sapply(1:nrow(dat), function(x) {
    if (dat[x,2]==1) { 
         write.csv(dat[ (dat[[2]]==1 ) & (1:nrow(dat) >= x) , ] , 
                   file = paste("fil_", x, ".csv") )
    } else {
         NULL
 }))

ただし、スクリプトは次のように NULL 値を返します。

[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

[[4]]
NULL

[[5]]
NULL

[[6]]
NULL

[[7]]
NULL

その他の詳細は次のとおりです。

> str(dat) 
'data.frame':   7 obs. of  7 variables:
 $ pom.xml.         : int  1 1 0 0 0 1 1
 $ ZooKeeper.java   : int  0 0 0 0 0 1 0
 $ HBase.java       : int  1 1 1 0 1 1 0
 $ Hadoop.java.     : int  0 0 0 0 0 0 1
 $ BasicServer.java.: int  1 0 0 0 0 0 0
 $ Abstract.java.   : int  1 1 0 1 0 1 1
 $ HBaseRegion.java : int  1 0 0 0 0 1 1

> dput(dat)
structure(list(pom.xml. = c(1L, 1L, 0L, 0L, 0L, 1L, 1L), ZooKeeper.java = c(0L, 
0L, 0L, 0L, 0L, 1L, 0L), HBase.java = c(1L, 1L, 1L, 0L, 1L, 1L, 
0L), Hadoop.java. = c(0L, 0L, 0L, 0L, 0L, 0L, 1L), BasicServer.java. = c(1L, 
0L, 0L, 0L, 0L, 0L, 0L), Abstract.java. = c(1L, 1L, 0L, 1L, 0L, 
1L, 1L), HBaseRegion.java = c(1L, 0L, 0L, 0L, 0L, 1L, 1L)), .Names = c("pom.xml.", 
"ZooKeeper.java", "HBase.java", "Hadoop.java.", "BasicServer.java.", 
"Abstract.java.", "HBaseRegion.java"), class = "data.frame", row.names = c("WHIRR-25", 
"WHIRR-28", "WHIRR-55", "WHIRR-61", "WHIRR-76", "WHIRR-87", "WHIRR-92"
))

> sessionInfo()
R version 2.13.1 (2011-07-08)
Platform: i386-pc-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=English_Australia.1252  LC_CTYPE=English_Australia.1252    LC_MONETARY=English_Australia.1252 LC_NUMERIC=C                      
[5] LC_TIME=English_Australia.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     
4

1 に答える 1

0

何かを救おうとしています....(NULLが返される理由については、上記の私のコメントを参照してください)

のデータのみに関心がある場合はdat[,2]==1、 を使用whichしてそれらを見つけることもできます。rows

interested <- which(dat[,2]==1)

さて、同じデータを含む個別のファイルを、毎回ヘッダー行なしで繰り返しますか? それがあなたのコードが今行っていることです。

理解するのがはるかに簡単なforので、ループを書く

row_index <- seq.int(nrow(dat))
for(.row in interested){

  write.csv(dat[(dat[[2]] == 1) & (row_index >=.row),], 
            file = sprintf('fil_%s.csv',.row))
}

fil_6.csv 現在のデータを使用すると、データ フレームの 6 行目を含むファイルが作成されます(x[,2]==1 .

このスクリプトがより大きなデータ セットにスケーリングされるかどうかは不明です。これは、何をしたいのかが明確でないためです。

于 2012-09-18T04:38:18.177 に答える