R 数据帧列表的子集-写入输出时出错

R 数据帧列表的子集-写入输出时出错,r,list,for-loop,lapply,write.table,R,List,For Loop,Lapply,Write.table,我在4个不同的位置有4个不同的.csv文件,我想使用相同的标准对它们进行子集。然后,我想以“originalfilename_cpt.csv”的形式为它们中的每一个编写输出(理想情况下是到原始位置,但我已经放弃了——不介意将它们写入工作区并手动移动它们) 因为它们位于不同的位置,所以我从单独读取文件开始: data1 <- read.csv("Subsets\\Folder1\\data1.csv") data2 <- read.csv("Subsets\\Folder2\\data

我在4个不同的位置有4个不同的.csv文件,我想使用相同的标准对它们进行子集。然后,我想以“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")
data1试试这个:

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)
}
for(沿(mylist)顺序排列的i){

clean.file
file
似乎是一个data.frame?使用
“\u cpt.csv”粘贴data.frame
不会产生一个好的文件名。
file
是列表中的每个元素,是的,都是数据帧。这是问题吗?我怎么才能得到
file
的名称呢?谢谢Roland!不过,这只是将
mylist
中的第一个元素子集,并为其他元素生成空输出。它还命名了我的在
mylist
中使用索引而不是名称的输出-我得到的是“1_cpt.csv”而不是“data1_cpt.csv”我没有一个可复制的示例,但我怀疑您的子设置步骤
pingtimehrs<3.334
是空输出的原因。我已修复了命名问题。忘记我说过的关于您的代码创建空输出的内容-我的错误!我将尝试编辑文件名。好吧,只要尝试编辑,我就会得到一个名为
“\u cpt.csv”
。我还键入了
名称(mylist)
和get
NULL
。我有点困惑:为什么我的列表不知道元素的名称?好的,我知道我的列表是一个未命名的列表。我尝试创建一个命名列表,但除非我将列表中的每个元素命名为与原始文件名完全相同的名称,否则我仍然无法将最终输出命名为“originalfilename\u cpt.csv”(对于
data1
data1.csv
来说,这似乎足够简单,但对于真实的文件名来说就没有那么简单了)。因此,我认为这条路线将变得复杂,而不是简化代码和任务-我将不得不考虑其他事情。但无论如何,感谢您的帮助,至少我现在知道问题出在哪里了!
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 (file in mylist){
  clean.file <- file[(file$pingtimehrs < 3.334), ]
  write.csv(clean.file, file=paste(file, "_cpt.csv", sep=""), row.names = F)
}
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
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)
}