我在4个不同的位置有4个不同的.csv文件,我想使用相同的标准对它们进行子集化。然后我想以#34; originalfilename_cpt.csv"形式写出输出。对于他们中的每一个(理想情况下是原始位置,但我已经放弃了 - 不要介意将它们写入工作区并手动移动它们)
因为它们位于不同的位置,所以我首先单独阅读文件:
data1 <- read.csv("Subsets\\Folder1\\data1.csv")
data2 <- read.csv("Subsets\\Folder2\\data2.csv")
data3 <- read.csv("Subsets\\Folder3\\data3.csv")
data4 <- read.csv("Subsets\\Folder4\\data4.csv")
然后创建了包含所有文件的列表:
mylist <- list(data1, data2, data3, data4)
从这里我尝试了2条路线 - 首先创建了一个函数并使用了lapply:
MyFunction <- function(file){
clean.file <- file[(file$pingtimehrs < 3.334), ]
write.csv(clean.file, file=paste(file, "_cpt.csv", sep=""), row.names = F)
}
lapply(mylist, MyFunction)
第二次使用for循环:
for (file in mylist){
clean.file <- file[(file$pingtimehrs < 3.334), ]
write.csv(clean.file, file=paste(file, "_cpt.csv", sep=""), row.names = F)
}
我在两种情况下都得到了相同的错误,我怀疑这与编写输出有关,因为我可以创建clean.file(至少是第一个)并且它看起来正确。这是我得到的错误:
Error in file(file, ifelse(append, "a", "w")) :
invalid 'description' argument
In addition: Warning message:
In if (file == "") file <- stdout() else if (is.character(file)) { :
the condition has length > 1 and only the first element will be used
有人可以发现我做错了吗?
答案 0 :(得分:0)
试试这个:
for (i in seq_along(mylist)){
clean.file <- mylist[[i]][(mylist[[i]]$pingtimehrs < 3.334), ]
write.csv(clean.file, file=paste(names(mylist)[i], "cpt.csv", sep="_"), row.names = F)
}