r - 如何在具有相同列表的 R 中使用嵌套的 for 循环?
问题描述
我正在尝试为我的项目做一些 R 编码。我必须从 R 中的一个目录读取一些 .csv 文件,并且必须将数据框分配为 df_subject1_activity1,我尝试过嵌套循环,但它不起作用。
前任:
我的目录名称是“Test”,我有六个 .csv 文件
subject1activity1.csv、subject1activity2.csv、subject1activity3.csv、subject2activity1.csv、subject2activity2.csv、subject2activity3.csv
现在我想编写代码以在 R 中加载此 .csv 文件并将数据框名称分配为
前任:
subject1activity1 = df_subject1_activity1
subject1activity2 = df_subject1_activity2
.... 等等使用 for 循环。
我的预期输出是:df_subject1_activity1 df_subject1_activity2 df_subject1_activity3 df_subject2_activity1 df_subject2_activity2 df_subject2_activity3
我尝试了以下代码: setwd(dirname(getActiveDocumentContext()$path)) new_path <- getwd() new_path
data_files <- list.files(pattern=".csv") # 识别文件名 data_files
for(i in 1:length(data_files)) {
for(j in 1:4){
assign(paste0("df_subj",i,"_activity",j)
read.csv2(paste0(new_path,"/",data_files[i]),sep=",",header=FALSE))
}
}
我没有得到欲望输出。R新手可以请任何人帮忙。谢谢
解决方案
你快到了。与往常一样,如果您不确定,使用更多行清楚地编码绝不是一个坏主意。
data_files <- list.files(pattern=".csv", full.names=TRUE) # Identify file names data_files
for( data_file in data_files) {
## check that the data file matches our expected pattern:
if(!grepl( "subject[0-9]activity[0-9]", basename(data_file) )) {
warning( "skiping file ", basename(data_file) )
next
}
## start creating the variable name from the filename
## remove the .csv extension
var.name <- sub( "\\.csv", "", basename(data_file), ignore.case=TRUE )
## prepend 'df' and introduce underscores:
var.name <- paste0(
"df",
gsub( "(subject|activity)", "_\\1", var.name ) ## this looks for literal 'subject' and 'acitivity' and if found, adds an underscore in front of it
)
## now read the file
data.from.file <- read.csv2( data_file )
## and assign it to our variable name
assign( var.name, data.from.file )
}
我没有要测试的文件,但如果上述失败,您应该能够逐行运行代码并轻松查看它开始出错的地方。
推荐阅读
- reactjs - Jest/Enzyme - 动作必须是普通对象。使用自定义中间件进行异步操作
- python - 需要将 JSON 字符串加载到 DataFrame 中
- pact - 如何运行 PACT Broker can-i-deploy 脚本?
- java - Selenium - 无法在 Firefox 中将父窗口重新聚焦
- javascript - For循环覆盖对象
- php - Composer 需要带有类似 OR 运算符的块
- r - R 代码 我可以重命名标题为 (total=n()) 的列吗?-
- ruby-on-rails - ruby on rails 中的简单形式 - 嵌套
- ruby-on-rails - 如何从 ruby on rails 应用程序中查询 UPDATE 表?
- javascript - JS indexOf 对象数组和 splice() 未删除正确的对象