我正在努力为特定存储库中的所有txt.files创建一个for循环。 目标是将所有单独保存的txt.files合并到一个数据帧中,并添加一个ID变量,该变量始终可以在txt文件名中找到(例如,文件“ 10_1。ID = 10。记录01.10.2015 131514_CsvData”。 txt“)
txt_files <- list.files("Data/study", pattern = ".txt")
txt_files [1]“ 1_1。录像18.09.2015 091037_CsvData.txt”“ 10_1。录像2015年1月10日131514_CsvData.txt”
[3]“ 100_1。记录02.10.2015 091630_CsvData.txt”“ 104_1。记录22.09.2015 142604_CsvData.txt”
[5]“ 107_1。录像18.09.2015 104300_CsvData.txt”“ 110_1。录像29.09.2015 081558_CsvData.txt”
[7]“ 112_1。记录21.09.2015 082908_CsvData.txt”“ 114_1。记录器29.09.2015 101159_CsvData.txt”
[9]“ 115_1。记录23.09.2015 141204_CsvData.txt”“ 116_1。记录30.09.2015 110624_CsvData.txt”
[11]“ 117_1。录制01.10.2015 141227_CsvData.txt”“ 120_1。录制17.2015.17 153516_CsvData.txt”
读入并合并txt.files
for ( file in txt_files){
# if the merged dataframe "final_df" doesn't already exist, create it
if (!exists("final_df")){
final_df<- read.table(paste("Data/study/",file, sep=""), header=TRUE, fill=TRUE)
temp_ID <- substring(file, 0,str_locate_all(pattern ='_1.',file)[[1]][1]-1)
final_df$ID <- temp_ID
final_df <- as.data.frame(final_df)
}
# if the merged dataframe does already exist, append to it
else {
temp_dataset <- read.table(paste("Data/study/",file, sep=""), header=TRUE, fill=TRUE)
# extract ID column from filename
temp_ID <- substring(file, 0,str_locate_all(pattern ='_1.',file)[[1]][1]-1)
temp_dataset$ID <- temp_ID
final_df<-rbind(final_df, temp_dataset)
}
return(as.data.frame(final_df))
}
答案 0 :(得分:0)
避免在循环中使用USERS FIELDS
------------ ----------------------------
id | Name field_id | item_id | value
------------ ----------------------------
448 | Karen 1 | 448 | 1234
489 | Steve 2 | 448 | bathurst
1 | 489 | 2234
2 | 489 | orange
RESULTS
USER
0 ==>
id: 448
employee_id: 1234
location: bathurst
1 ==>
id: 489
employee_id: 2234
location: orange
,这会导致过多的内存复制。考虑构建一个数据帧列表,并在任何循环之外使用rbind
将它们绑定一次。对于此方法,do.call
是一种比lapply
有用的迭代替代方法,它可以构建这样的数据帧列表,因为您无需记账初始化空列表并迭代更新元素。
还考虑不使用分隔符的for
和paste0
删除下划线到字符串末尾的任何字符以提取ID。
gsub