使用功能循环遍历目录中的文件集

时间:2019-02-14 20:11:15

标签: r tapply

我正在尝试进行一些数据分析,如下所示:我有大约100个主题,每个主题都有一个包含40,000行数字的文件。我还有一个索引文件,其中包含包含组号的40,000条对应行。我试图为每个主题获取每个小组的钱。我可以轻而易举地对一个主题进行此操作,就像这样:

tapply(df$numbers, df$group, mean)

我还可以加载一个包含每个主题数据文件名的数据框。我想做的是创建一个for循环,在其中可以获取每个主题的上述tapply函数的输出,可能是通过遍历文件名并将每个文件名作为一个新的数据帧(也许是?)。最后,我将其输出为.csv,主题名称为行,组名称为列。

现在我很困。谁能提供一些见识?

编辑:这是我的解决方案,由下面的超级有用用户jyr提供,并稍作调整。我不清楚的一件事是,我的图例(带有标签列表的文件)是它自己的文件,而不是每个数据文件中的一列。另外,tapply还很讨厌参数长度,因此我不得不做一些额外的数据帧创建。这是最终的解决方案:

labels_L <-read.table("C:/Users/jakes/Desktop/HMAT-files/CIVET_HMAT_left.txt")
new_df<-c()
listfiles <- dir("C:/users/jakes/Desktop/HMAT-files/thickness/left")
for(f in listfiles){
        thick <-read.table(file.path("C:/users/jakes/Desktop/HMAT-files/thickness/left",f), header=FALSE)
    df = data.frame(labels_L, thick)
         new_line <- c(f, tapply(df$V1.1, df$V1, mean))
         new_df <- rbind(new_df, new_line)
 }
write.csv(new_df,"C:/users/jakes/Desktop/HMAT-thickness-L.csv")

非常感谢您的帮助,这个论坛为我节省了无数小时!

1 个答案:

答案 0 :(得分:0)

您可以使用dir读取文件名,然后遍历它们,读取每个文件,然后轻按一下,创建带有文件名和每个文件结果的向量,并将它们与rbind合并。我希望这与您想要的类似,或者至少可以将您推向正确的方向。

new_df<-c()
list_of_files <- dir("your_folder_where_data_is")
for(f in list_of_files){
         df <- read.csv(file.path("your_folder_where_data_is",f))
         new_line <- c(f, tapply(df$V1.1, df$V1, mean))
         new_df <- rbind(new_df, new_line)
 }