dir file list.file list.dirs

dir file list.file list.dirs,第1张

dir file list.file list.dirs identify the folders

current.folder <- “C:/Where my files currently live”
new.folder <- “H:/Where I want my files to be copied to”

find the files that you want

list.of.files <- list.files(current.folder, “SDM.tif$”)

copy the files to the new folder

file.copy(list.of.files, new.folder)

#https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/list.files

list.files(path = ".", pattern = NULL, all.files = FALSE,
       full.names = FALSE, recursive = FALSE,
       ignore.case = FALSE, include.dirs = FALSE, no.. = FALSE)
       
        dir(path = ".", pattern = NULL, all.files = FALSE,
       full.names = FALSE, recursive = FALSE,
       ignore.case = FALSE, include.dirs = FALSE, no.. = FALSE)


list.dirs(path = ".", full.names = TRUE, recursive = TRUE)

#https://statisticsglobe.com/extract-file-and-directory-name-from-path-in-r

file_path <- “C:/Users/Joach/Desktop/my directory/my file.txt” # Example path
file_path # Print example path
[1] “C:/Users/Joach/Desktop/my directory/my file.txt”
As you can see based on the previous output of the RStudio console, our example data is stored as TXT file in a folder called “my directory”.

#Example 1: Find Directory Name from Path Using dirname() Function

Example 1: Find Directory Name from Path Using dirname() Function
This example shows how to return only the directory name from our path using the dirname function.

For this, we simply have to apply the dirname function to our path object that we have created before. The dirname function automatically removes the file name and returns on the directory path:

dirname(file_path) # Apply dirname function
#[1] “C:/Users/Joach/Desktop/my directory”

Example 2: Find File Name from Path Using basename() Function

This example illustrates how to show only the name of our file by applying the basename function to our path object:
basename(file_path) # Apply basename function

[1] “my file.txt”

三、批量读取

—xlsx包
首先尝试用R包解决。即xlsx包。

xlsx包在加载时容易遇到问题。基本都是由于java环境未配置好,或者环境变量引用失败。因此要首先配置java环境,加载rJava包。

百度了一下,网上已有很多解决方案。我主要是参考这个帖子, *** 作步骤为:

1、 安装最新版本的java。如果你用的R是64位的,请下载64位java。
下载地址: http://www.java.com/en/download/manual.jsp

要安装在 C:Program FilesJava 下面,win8的尤其小心不要安装为C:Program Files(x86)。可能是R在读取路径时,对x86这样的文件夹不大好识别吧,我第一次装在x86里,读取是失败的。

2、在R中加载环境,即一行代码,路径要依据你的java版本做出更改。
R

Sys.setenv(JAVA_HOME=‘C:Program FilesJavajre1.8.0_45’)
之后再加载rjava包或者xlsx包就成功了。

xlsx包加载成功后,用read.xlsx就可以直接读取xlsx文件,还可以指定读取的行和段,以及第几个表,以及可以保存为xlsx文件,这个包还是很强大的。

但是这个方法存在两个问题:

1、不是所有的公司电脑都能自由的配置java环境。很多人的权限是受限的。而且有些公司内部应用是在java环境下配置的。就算你找了IT去安装java,但是一些内部应用可能会因为版本号兼容问题而出错,得小失大。

2、用xlsx包读取数据,在数据量比较小的时候速度还是比较快的。但是如果xlsx本身比较大,包含数据多,read.xlsx效率会很低,不如data.table包的fread读取快捷以及省内存。但fread函数不支持xlsx的读入。。。

(参见这篇帖子,里面对千万行数据,fread也只用了10秒左右,比常规的read.table或者read.csv至少省时一倍)

综上,由于java环境的复杂性与兼容度,还有xlsx包本身读取速度的限制,用xlsx包读取xlsx包的方法,更适合于:

1、个人电脑,自己想怎么玩都无所谓,或者高大上的linux, mac环境

2、数据量不会特别大,而且excel文件很干净,需要细节的 *** 作

实际 *** 作案例:

批量写入

#1、读取xlsx中所有的sheet表格
#如果像vector一样定义List??——list()函数来主动定义,用data.list[[i]]来赋值
data.list<-list()
for (i in 1:2){
data.list[[i]]=read.xlsx(“C1.xlsx”,i)
}
批量写出
#3、利用List批量读出 *** 作
#难点:如果构造输出表格的名称——paste来构造名称
flie=list()
xlsxflie=paste(1:2,".xlsx",sep="")

for(i in 1:2){
flie[[i]]=paste(“C:/Users/long/Desktop/”,xlsxflie[i],sep="")
write.xlsx(data.list2[[i]],file)
}

其中出现了一个小错误:Error in file[[i]] : object of type ‘closure’ is not subsettable

这一错误是因为我写错函数名字了… file->flie(详情见:http://bbs.pinggu.org/thread-3142627-1-1.html)

主要运用了list函数,详情可见:R语言︱list用法、批量读取、写出数据时的用法

——————————————————————————————————————————————————————————————————

四、批量读入XLSX文件——先转换为CSV后读入

CSV读入的速度较快,笔者这边整理的是一种EXCEL VBA把xlsx先转换为csv,然后利用read.csv导入的办法。

WPS中调用VBA需要额外下砸一个插件,

之后应用list.files以List方式读入。

#lapply读取法
filenames <- list.files(“C:/Users/a.csv”, pattern = “.csv”,full.names = TRUE) #变成list格式
#没有full.names = TRUE,都会出现cannot open file: No such file or directory

name=function(x) {
read.csv(x,header=T)
}
datalist <- lapply(filenames,name) #filenames执行name函数

——————————————————————————————————————————————————————————————————
五、批量读入文件夹中的指定文件(如*.xlsx)
代码思路:先遍历文件夹(list.files),然后通过循环依次读写(read.xlsx)。
为什么lsit.files不能直接把完整数据读入文件?——需要read.xlsx这一步骤

##批量读入文件夹中的xlsx文件
#如何批量读取一个文件夹中的各种txt文件
micepath <- “C:/Users/long/Desktop”
micefiles <- list.files(micepath, pattern = “*.xlsx$”, full.names = TRUE)

##文件信息放入list中
files=list()
for (i in 1:2){
files[i]=read.xlsx(micefiles[[i]],header = F,1)
}

——————————————————————————————————————————————————————————————————

五、批量读入文件夹中的文本文件(*.txt),并生成名称、文档数据框
——用在情感分析中情感词的打分数

代码思路:先遍历文件夹中所有txt(list.files)、构造文本读入函数(read.txt)、找文本名字(list.files)、然后生成数据框(as.data.frame)

##批量读入txt文件,并将文本放入同一个数据框
reviewpath <- “F:/R语言/R语言与文本挖掘/情感分析/数据/rawdata/review_sentiment/train2”
completepath <- list.files(reviewpath, pattern = “*.txt$”, full.names = TRUE)

######批量读入文本
read.txt <- function(x) {
des <- readLines(x) #每行读取
return(paste(des, collapse = “”)) #没有return则返回最后一个函数对象
}
review <- lapply(completepath, read.txt)
#如果程序警告,这里可能是部分文件最后一行没有换行导致,不用担心。

######list转数据框
docname <- list.files(reviewpath, pattern = “*.txt$”)
reviewdf <- as.data.frame(cbind(docname, unlist(review)),
stringsAsFactors = F)

其中,list.files()中,full.names=T代表读入文件+信息,full.names=F代表读入文件名字。

本代码来源于书《数据挖掘之道》情感分析章节。

——————————————————————————————————————————————————————————————————

六、excel的xlsx格式读取——openxlsx包

跟xlsx包可以一拼,为什么没有特别好的excel包,因为微软的软件不开源,而且内嵌设置时长变化,所以么有一款统一的好函数包,来进行读取。

library(openxlsx)
data=read.xlsx(“hsb2.xlsx”,sheet=1)

——————————————————————————————————————————————————————————————————

七、write.table读出txt文本
write.table(data,“names”,
quote = F,row.names = FALSE, col.names = FALSE)
输出的结果可能是像excel列表一样:
id names
1 “您好”
2 “格式”
3 “读取”
所以需要去掉行、列名,同时去掉双引号。
如果我想得到,这样格式的呢:

您好 格式 读取

需要调整ecol,默认的ecol="n",就是回车,所以会造成换行,所以需要换成“r”,同时中间需要有空格分开,所以最终ecol="r "用【+空格】来表达空格

——————————————————————————————————————————————————————————————————————

八 文件夹读入
文件夹读入的方式也挺多的。

第一步:获取文件夹内全文件内容

两种函数:dir()以及list.files()

dir(‘C:UserslongDesktop’,pattern = “txt " ) l i s t . f i l e s ( ′ C : U s e r s l o n g D e s k t o p ′ , p a t t e r n = " t x t ") list.files('C:\Users\long\Desktop\',pattern = "txt ")list.files(′C:UserslongDesktop′,pattern="txt”)
同时,可以通过pattren来选择规定格式的文件内容。

第二步:生成系统路径

paste(“C:UserslongDesktop”,“txt”)
[1] “C:UserslongDesktop txt”
file.path(“C:UserslongDesktop”,“txt”)
[1] “C:UserslongDesktop/txt”

对比两者,一般用paste来生成系统路径的时候,在最终结果,结合的地方会多一个空格,当然也可以用去空格的方式排除,但是不够好。
所以可以用file.path的方式直接生成,比较方便,而且绝对正确
————————————————
版权声明:本文为CSDN博主「悟乙己」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_26917383/article/details/51100736

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5677223.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存