【发布时间】:2019-02-12 13:42:43
【问题描述】:
我对 R 很陌生,所以我希望这个问题仍然很有趣。我创建了一个for 循环,它生成了 11 个 csv 文件。这是我用来帮助澄清问题的代码:
for (i in seq(0, 1, by = 0.1))
{collar$results2<-mutate(collar,results2 = case_when( (probability > i & results1 == "POSITIVE") | (probability < i & results1 == "NEGATIVE") ~ TRUE, TRUE ~ FALSE) )
as.character(collar$results2)
collaraccuracy1=paste('collar41361_41365', i, 'csv', sep = '.')
write.csv(collar,collaraccuracy1)}
如您所见,所有创建的文件都具有以下格式:collar41361_41365.i.csv,其中 ``i` 的范围从 0 到 1 每 0.1,如下所示:
[1] "collar41361_41365.0.csv"
[1] "collar41361_41365.0.1.csv"
[1] "collar41361_41365.0.2.csv"
[1] "collar41361_41365.0.3.csv"
[1] "collar41361_41365.0.4.csv"
[1] "collar41361_41365.0.5.csv"
[1] "collar41361_41365.0.6.csv"
[1] "collar41361_41365.0.7.csv"
[1] "collar41361_41365.0.8.csv"
[1] "collar41361_41365.0.9.csv"
[1] "collar41361_41365.1.csv"
现在,我想将所有文件格式化为一个,因为它们具有相同的结构(10 列、240 行和相同的列标题)和相同的名称格式。
请参阅下面的代码以及我一直在尝试接管这 11 个文件的操作。我使用了Sys.glob,因为这是在另一篇文章中提到的执行任务的最佳方式。我之前已经为单个文件编写了此操作并且它有效。我现在想一次为所有 11 个文件应用代码:
#1) Reading multiple files at one. Now, this will only work for the files with a decimal value of i in their name -which is fine-. If I was reading files with i=0 or i=1, then we'll have the pattern "collar41361_41365.*.csv". Am I right?
collaraccuracy<-lapply(Sys.glob("collar41361_41365.***.csv"), read.csv)
#2) Select only the columns with header "observed","predicted","probability","results1","results2.results2"
collaraccuracy<-fread("collar41361_41365.***.csv",select=c("observed","predicted","probability","results1","results2.results2"),stringsAsFactors = F)
#3) Rename column "results2.results2" to "results2"
colnames(collaraccuracy)<-c("observed","predicted","probability","results1","results2")
#4) Create 6th column "results" by merging columns "results1" and "results2"
collaraccuracy$results <- paste(collaraccuracy$results2,
collaraccuracy$results1,sep="_")
#5) End of the formatting. Write new formated csv files with the pattern "collar41361_by_41365.i.csv"
collaraccuracy2=paste('collar41361_by_41365', i, 'csv', sep = '.')
write.csv(collaraccuracy,collaraccuracy2)
如您所见,我有 5 种不同的操作来计算最终应该有 9 个文件,其中 i 值为 (0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9)
我特别关心操作 1) 和 2) 中的语法,但这是迄今为止我能做的最好的。
有什么提示可以制定这个吗?任何帮助表示赞赏!
附:更新:我尝试创建一个函数并将其应用到具有lapply 的其余文件:
collarcolumns<-function(collaraccuracy1)
{collaraccuracy1<-fread(("collar41361_41365.1.csv"),select=c("observed","predicted","probability","results1","results2.results2"),stringsAsFactors = F)
colnames(collaraccuracy1)<-c("observed","predicted","probability","results1","results2")
collaraccuracy1$results <- paste(collaraccuracy1$results2, collaraccuracy1$results1,sep="_")
collaraccuracy2=paste('collar41361_by_41365', i, 'csv', sep = '.')
write.csv(collaraccuracy1,collaraccuracy2)}
lapply(Sys.glob("collar41361_41365.*.csv"), collarcolumns)
R. 打印了 11 个"NULL"s。我走对了吗?
【问题讨论】:
-
您似乎喜欢删除和转发您的问题。如果帖子不清楚,只需编辑它而不是删除和重新发布。您删除的帖子越多,被禁止提问的机会就越高。接受答案也是帮助避免禁令的一种方法(我认为),这是一种常见的礼貌。
-
这是你之前的一个问题:stackoverflow.com/questions/54649526/…
-
@NelsonGon 感谢您的评论。我对你的陈述有点困惑,因为我从未删除过以前的问题,因为我知道其他人可能会从共享信息中受益。我也从未转发过任何问题。如果对同一个脚本提出新问题是个问题,我很抱歉,但这两个问题都与我在创建脚本时遇到的非常不同的问题有关。我只是认为发布两个单独的问题更有用,即使它们属于同一脚本的创建,而不是编辑可能会丢失原始信息的先前问题。
-
@NelsonGon 我同意接受答案是本论坛动态非常重要的一部分这一事实。感谢您的提醒,我鼓励每个用户接受并投票答案和 cmets。
-
在我看来,在第一个 for 循环中进行所有这些操作会更容易,并且只有在您完全按照需要格式化数据后才写入 csvs。这种方法能解决您的问题吗?
标签: r for-loop formatting