编辑:我取得了一些进展。所以我读了子集,并能够在一定条件下分解我的数据帧。假设titleCSV [3]由文件名(“file1”,“file2”,“file3”等)组成,titleCSV [13]包含值(-18,-8,-2等)。代码如下:
titleRMS <- data.frame(titleCSV[3], titleCSV[13])
for(x.RMS in titleRMS[2]){
x.RMS <- gsub("[A-Za-z]","",r)
x.RMS <- gsub(" ","",r)
x.RMS = abs(as.numeric(r))
}
x.titleRMSJudge <- data.frame(titleRMS[1], x.RMS)
x.titleRMSResult <- subset(x.titleRMSJudge, r < 12)
我现在的问题是,打印x.titleRMSResult第一列的每一行的最佳方法是什么?谢谢,伙计们!
顺便说一下,这是我的titleRMS的输入:dput(titleRMS)
structure(list(FILE.NAME = c("00-Introduction.mp3", "01-Chapter_01.mp3",
"02-Chapter_02.mp3", "03-Chapter_03.mp3", "04-Chapter_04.mp3",
"05-Chapter_05.mp3", "06-Chapter_06.mp3", "07-Chapter_07.mp3",
"08-Chapter_08.mp3", "09-Chapter_09.mp3", "10-Chapter_10.mp3",
"11-Chapter_11.mp3", "12-Chapter_12.mp3", "Bonus_content.mp3",
"End.mp3"), AVG.RMS..dB. = c(-14, -10.74, -9.97, -10.53, -10.94,
-12.14, -11, -9.19, -10.42, -11.51, -14, -10.96, -11.71, -11,
-16)), .Names = c("FILE.NAME", "AVG.RMS..dB."), row.names = c(NA,
-15L), class = "data.frame")
以下原始帖子 纽布在这里!在R中编码所以我试图分析一个csv文件。一列有10行,文件名不同,而另一列有10行,值不同。我想将第二列运行到循环中,如果它大于/小于某个值,我希望它打印关联文件名和消息。我不知道如何让两个列一起循环运行,以便使用正确的值/消息打印正确的文件名。我写了一个循环,最终检查每个值的行数和其他列中的行数一样多。目前,所有10行都符合我要打印的消息的标准,所以我收到了100条消息!
titleRMS <- data.frame(titleCSV[3], titleCSV[13])
for(title in titleRMS[1]){
title <- gsub(" ","",title)
}
for(r in titleRMS[2]){
r <- gsub("[A-Za-z]","",r)
r <- gsub(" ","",r)
r = abs(as.numeric(r))
for(t in title){
for(f in r){
if (f < 18 & f > 0) {
message(t, "is Loud!")
}
}
}
}
这行代码只打印每条消息的第一个文件名:
for(r in titleRMS[2]){
r <- gsub("[A-Za-z]","",r)
r <- gsub(" ","",r)
r = abs(as.numeric(r))
for(f in r){
if (f < 18 & f > 0) {
message(t, "is Loud!")
}
}
}
有人可以给我一些提示,甚至重写我写的内容,告诉我如何得到我需要的东西吗?谢谢,伙计们!
答案 0 :(得分:1)
你在努力使自己变得艰难。你不需要正则表达式,你可能不需要循环,至少不需要通过数据框。当然你不需要嵌套循环。 我想这会做你想说的......
indicesToMessage <- titleRms[, 2] > 0 & titleRms[, 2] < 18
myMessages <- paste(titleRms[indicesToMessage, 1], "is Loud!")
for (i in 1:length(myMessages)) {
message(myMessages[i])
}
更像R的方式(读取:没有显式循环)来做最后一行是这样的:
invisible(lapply(myMessages, message))
invisible
是必需的,因为message()
不返回任何内容,只是打印到控制台有副作用,但lapply
需要返回并打印{{1}如果没有。 NULL
只会屏蔽invisible
。
由于您的数据是否定的,我认为当绝对值NULL
介于0和18之间时,您确实需要消息。这适用于该情况。
abs()
答案 1 :(得分:1)
我已经找到了自己的问题。以下是我写的要得出的结论:
titleRMS <- data.frame(titleCSV[3], titleCSV[13])
filesHighRMS <- vector()
x.titleRMSJudge <- data.frame(titleCSV[3], titleCSV[13])
x.titleRMSResult <- subset(x.titleRMSJudge, titleCSV[13] > -12 & titleCSV[15] > -1)
for(i in x.titleRMSResult[,1]){
filesHighRMS <- append(filesHighRMS, i, 999)
}
emailHighRMS <- paste(filesHighRMS, collapse=", ")
blurbHighRMS <- paste("" ,nrow(x.titleRMSResult), " file(s) (" ,emailHighRMS, ") have a high RMS and are too loud.")
对代码不熟悉,我打赌有一种更简单的方法,我很高兴能够自己解决这个问题。 : - )