我有几个不同的txt文件具有相同的结构.现在我想用fread将它们读入R,然后将它们组合成一个更大的数据集.
## First put all file names into a list
library(data.table)
all.files <- list.files(path = "C:/Users",pattern = ".txt")
## Read data using fread
readdata <- function(fn){
dt_temp <- fread(fn, sep=",")
keycols <- c("ID", "date")
setkeyv(dt_temp,keycols) # Notice there's a "v" after setkey with multiple keys
return(dt_temp)
}
# then using
mylist <- lapply(all.files, readdata)
mydata <- do.call('rbind',mylist)
Run Code Online (Sandbox Code Playgroud)
代码工作正常,但速度不理想.每个txt文件有1M个观察值和12个字段.
如果我用它fread来读取单个文件,那就快了.但是使用apply,那么速度非常慢,显然比逐个读取文件需要花费很多时间.我想知道这里出了什么问题,速度提升有什么改进吗?
我试图llply在plyr包中,有是没有太大的速度上涨.
此外,是否有任何语法data.table实现垂直连接喜欢rbind和unionin sql?
谢谢.
我有上百个中等大小的Excel文件(5000两50.0000行之间有大约100列)加载到R.他们有一个明确的命名模式,比如x_1.xlsx,x_2.xlsx等等.
如何以最快,最直接的方式将这些文件加载到R中?
我试图获取匹配全路径模式的文件列表.到目前为止,我已经使用了list.files()但它没有用.
我们假设我们有以下目录组织:
results
|- A
| |- data-1.csv
| |- data-2.csv
|
|- B
|- data-1.csv
|- data-2.csv
Run Code Online (Sandbox Code Playgroud)
然后是以下命令:
list.files(pattern='data-.*\\.csv', recursive=TRUE)
Run Code Online (Sandbox Code Playgroud)
将返回与模式匹配的所有文件.这有效,但使用完整路径模式时会出现问题.例如,如果我想从目录结果/ A中获取所有CSV文件,我可以这样做:
list.files(pattern='results/A/data-.*\\.csv', recursive=TRUE)
Run Code Online (Sandbox Code Playgroud)
但这不起作用.不知何故,似乎R无法使用全路径模式作为正则表达式.在这种情况下,解决方案可能只是使用结果/ A作为基本路径.但在更复杂的问题中,这是不可能完成的.例如,在某些时候,我们可能希望匹配仅包含字符的子目录:
list.files(pattern='results/[A-Z]+/data-.*\\.csv', recursive=TRUE)
Run Code Online (Sandbox Code Playgroud)
可以在R中这样做吗?
更新:在使用临时解决方案一段时间后,我决定一次又一次地停止输入相同的内容.因此,我创建了一个用于简化此任务的库.
我正在使用R来显示一些所有数据都是.txt格式的数据.目录中有几百个文件,我想一次性将它们全部加载到一个表中.
有帮助吗?
编辑:
列出文件不是问题.但是我无法从列表转到内容.我从这里尝试了一些代码,但是我得到了这个部分的错误:
all.the.data <- lapply( all.the.files, txt , header=TRUE)
Run Code Online (Sandbox Code Playgroud)
话
Error in match.fun(FUN) : object 'txt' not found
Run Code Online (Sandbox Code Playgroud)
任何能够澄清这个问题的代码片段都将不胜感激.
我有900000个csv文件,我想把它们组合成一个大的data.table.对于这种情况,我创建了for loop一个逐个读取每个文件并将它们添加到的文件data.table.问题是它的执行速度变慢,所用的时间呈指数级增长.如果有人可以帮助我让代码运行得更快,那就太棒了.每个csv文件都有300行和15列.我到目前为止使用的代码:
library(data.table)
setwd("~/My/Folder")
WD="~/My/Folder"
data<-data.table(read.csv(text="X,Field1,PostId,ThreadId,UserId,Timestamp,Upvotes,Downvotes,Flagged,Approved,Deleted,Replies,ReplyTo,Content,Sentiment"))
csv.list<- list.files(WD)
k=1
for (i in csv.list){
temp.data<-read.csv(i)
data<-data.table(rbind(data,temp.data))
if (k %% 100 == 0)
print(k/length(csv.list))
k<-k+1
}
Run Code Online (Sandbox Code Playgroud) 我想创建一个自动生成单向和多变量回归分析的函数,但我无法弄清楚如何在向量中指定**变量...**这看起来很简单,但略读文档我到目前为止还没弄明白......
简单的例子
a<-rnorm(100)
b<-rnorm(100)
k<-c("a","b")
d<-c(a,b)
summary(k[1])
Run Code Online (Sandbox Code Playgroud)
但是k [1] ="a"并且是一个字符向量... d只是b附加到a,而不是变量名.实际上,我希望k [1]代表向量a.
感谢任何答案......
//中号
我在 R 中聚合了一堆 CSV 文件,我使用以下代码成功完成了这些文件(在这里找到):
Tbl <- list.files(path = "./Data/CSVs/",
pattern="*.csv",
full.names = T) %>%
map_df(~read_csv(., col_types = cols(.default = "c")))
Run Code Online (Sandbox Code Playgroud)
我想在 Tbl 中包含 .csv 文件名(最好没有文件扩展名)作为一列。我找到了一个使用 plyr 的解决方案,但我想坚持使用 dplyr,因为 plyr 会导致我的代码进一步出现故障。
有什么办法可以在上面的代码中添加一些东西来告诉 R 在 Tbl$filename 中包含文件名吗?
非常感谢!
我有 100 个关于 100 个不同位置的数据的数据集。
我想为每个数据集获取相同变量的子集。就像是:
dataset1<-subset(dataset1, which(gender=='F'))
dataset2<-subset(dataset2, which(gender=='F'))
dataset3<-subset(dataset3, which(gender=='F'))
dataset4<-subset(dataset4, which(gender=='F'))
Run Code Online (Sandbox Code Playgroud)
.....
如何同时完成所有 100 个数据集而不是编写 100 行?
我试图读取并合并目录中的所有csv文件.我找到了这个优秀的答案:将多个.csv文件导入R但它似乎对我不起作用.
我能够列出文件(它们位于我的主目录中名为"test"的子文件夹中):
library(data.table)
files <- list.files(path = "test",pattern = ".csv")
print(files)
Run Code Online (Sandbox Code Playgroud)
这样可以正确打印目录的内容.
当我尝试使用它们加载它们时
temp <- lapply(files, fread, sep=",")
data <- rbindlist(temp)
Run Code Online (Sandbox Code Playgroud)
我明白了 File 'xyz.csv' does not exist. Include one or more spaces to consider the input a system command.
我是否必须以某种方式再次指定路径?我争辩说这个信息已经包含在文件对象中了.谢谢你的帮助!
我想读取 s3 目录中给出的 r 中的 csv 文件。每个文件大小超过6GB,每个文件都需要在r中进一步计算。假设我在 s3 文件夹中有 10 个文件,我需要在for loop. 首先,我尝试了这个,它在我知道 csv 文件的名称的情况下工作:
library(aws.s3)
Sys.setenv("AWS_ACCESS_KEY_ID" = "xyy",
"AWS_SECRET_ACCESS_KEY" = "yyx")
data <-
s3read_using(FUN=read.csv, object="my_folder/file.csv",
sep = ",",stringsAsFactors = F, header=T)
Run Code Online (Sandbox Code Playgroud)
但是,如何在 s3read_using 函数中没有明确给出名称的情况下访问多个文件。这是必要的,因为我partition()在 Spark 中使用,它将原始数据集划分为具有一些通用名称(例如part1-0839709037fnfih.csv)的子部分。如果我可以自动列出 s3 文件夹中的 csv 文件并在计算之前使用它们,那就太好了。
get_ls_files <- .... #gives me list of all csv files in S3 folder
for (i in 1:length(get_ls_files)){
filename = get_ls_files[i]
tmp = s3read_using(FUN=read.csv, object=paste("my_folder/",filename),
sep = ",",stringsAsFactors = F, header=T)
.....
}
Run Code Online (Sandbox Code Playgroud)