我有这个脚本:
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
答案 0 :(得分: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
。
这个脚本是否会扩展到更大的数据集尚不清楚,因为目前还不清楚你想做什么。