R脚本从命令行读取/执行许多.csv文件,并将所有结果写入.csv文件

时间:2015-12-01 01:03:13

标签: r csv command-line

我在文件夹中有很多.csv文件。我希望通过命令行中的R脚本自动从每个.csv文件中获取binning结果,并逐个将所有文件的结果写入result.csv文件。例如,我有file01.csv,file02.csv,file03.csv,file04.csv,file05.csv。我希望第一个R脚本读取/执行file01.csv并将结果写入result.csv文件,然后读取/执行file02.csv并将结果写入result.csv,再次读取/执行file03.csv并将结果写入结果.csv,等等。这就像是所有文件的循环,我想从命令行执行R脚本。

这是我开始的R脚本:

data <- read.table("file01.csv",sep=",",header = T)

df.train <- data.frame(data)

library(smbinning) # Install if necessary

<p>#Analysis by dwell:</p>

df.train_amp <-
rbind(df.train)

res.bin <- smbinning(df=df.train_amp, y="cvflg",x="dwell")

res.bin      #Result

<p># Analysis by pv</p>
df.train_amp <-
rbind(df.train)

res.bin <- smbinning(df=df.train_amp, y="cvflg",x="pv")

res.bin   #Result

任何建议和支持都将受到高度赞赏。

感谢

2 个答案:

答案 0 :(得分:1)

首先,您需要读取目录中的文件。将所有源文件放在同一个源目录中。我假设您的CSV文件都具有相同的形状。另外,我在这里对标题一无所知。

directory <- "C://temp"  ## for example
filenames <- list.files(directory, pattern = "*.csv", full.names = TRUE)
# If you need full paths then change the above to 
# filenames <- list.files(directory, pattern = "*.csv", full.names = TRUE)

bigDF <- data.frame()
for (f in 1:length(filenames)){
    tmp <- read.csv(paste(filenames[f]), stringsAsFactors = FALSE)
    bigDF <- rbind(bigDF, tmp)
}

这会在每次阅读时将tmp中的行添加到bigDF,最终会导致最终bigDF

将df写入csv在R中也是微不足道的。像

这样的东西
# Write to a file, suppress row names
write.csv(bigDF, "myData.csv", row.names=FALSE)

# Same, except that instead of "NA", output blank cells
write.csv(bigDF, "myData.csv", row.names=FALSE, na="")

# Use tabs, suppress row names and column names
write.table(bigDF, "myData.csv", sep="\t", row.names=FALSE, col.names=FALSE) 

答案 1 :(得分:0)

最后我发现上面的问题可以解决如下:

library(smbinning)#Install(如有必要)。

files&lt; - list.files(pattern =&#34; .csv&#34;)##创建一个包含文件夹中所有文件名的向量

cutpoint&lt; - rep(0,length(files))

for(i in 1:length(files)){

data&lt; - read.csv(files [i],header = T)

df.train&lt; - data.frame(data)

df.train_amp&lt; - rbind(df.train,df.train,df.train,df.train,df.train,df.train,df.train,df.train)#只需乘以数据< / p>

cutpoint [i]&lt; - smbinning(df = df.train_amp,y =&#34; cvflg&#34;,x =&#34; dwell&#34;)#smbinning在这里计算

}

结果&lt; - cbind(文件,cutpoint)#生成详细信息结果

结果&lt; - cbind(文件,波段)#生成波段结果

write.csv(结果,&#34; result_dwell.csv&#34;)#将结果写入csv文件