在目录中的文件集上循环使用函数
Use function in loop over set of files in directory
我正在尝试进行如下数据分析:我有大约 100 个受试者,每个受试者都有一个包含 40,000 行数字的文件。我还有一个索引文件,其中包含 40,000 行包含组号的相应行。我正在尝试获取每个主题的每个组的方法。我可以用 tapply 轻松地为一个主题做这件事,像这样:
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")
非常感谢您的帮助,这个论坛为我节省了无数时间!
您可以使用 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)
}
我正在尝试进行如下数据分析:我有大约 100 个受试者,每个受试者都有一个包含 40,000 行数字的文件。我还有一个索引文件,其中包含 40,000 行包含组号的相应行。我正在尝试获取每个主题的每个组的方法。我可以用 tapply 轻松地为一个主题做这件事,像这样:
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")
非常感谢您的帮助,这个论坛为我节省了无数时间!
您可以使用 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)
}