标签: readr

你如何将多个.txt文件读入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)

任何能够澄清这个问题的代码片段都将不胜感激.

r fread lapply read.table readr

23
推荐指数
5
解决办法
4万
查看次数

如何跳过阅读器中的某些列

我有一个名为"test.csv"的简单csv文件,其中包含以下内容:

colA,colB,colC
1,"x",12
2,"y",34
3,"z",56
Run Code Online (Sandbox Code Playgroud)

假设我想跳过colA读取,只读colB和colC.我想要一个通用的方法来做这个,因为我有很多文件要读入,有时colA被称为其他东西,但colB和colC总是相同的.

根据read_csv文档,实现此目的的一种方法是为col_types传递命名列表,并仅命名要保留的列:

read_csv('test.csv', col_types = list(colB = col_character(), colC = col_numeric()))
Run Code Online (Sandbox Code Playgroud)

如果不提及colA,它应该从输出中删除.但是,结果数据框是:

Source: local data frame [3 x 3]

      colA colB colC
    1    1    x   12
    2    2    y   34
    3    3    z   56
Run Code Online (Sandbox Code Playgroud)

我做错了什么或read_csv文档不正确?根据帮助文件:

如果是列表,则每列必须包含一个"收集器".如果您只想读取列的子集,则可以使用命名列表(其中名称给出列名称).如果未按名称提及列,则不会将其包含在输出中.

r readr

19
推荐指数
2
解决办法
1万
查看次数

如何将dplyr组写入单独的文件?

我正在尝试为与dplyr的group_by函数分组的数据框中的每个组创建单独的.csv文件.到目前为止我有类似的东西

by_cyl <- group_by(mtcars, cyl)
do(by_cyl, write_csv(., "test.csv"))
Run Code Online (Sandbox Code Playgroud)

正如所料,这会写一个.csv文件,只包含最后一组的数据.如何修改它来编写多个.csv文件,每个文件的文件名都包含cyl?

csv r dplyr readr

14
推荐指数
3
解决办法
2420
查看次数

为什么dplyr的mutate()会改变时间格式?

readr用来读取包含时间格式的日期列的数据.我可以使用col_types选项正确读取它readr.

library(dplyr)
library(readr)

sample <- "time,id
2015-03-05 02:28:11,1674
2015-03-03 13:10:59,36749
2015-03-05 07:55:48,NA
2015-03-05 06:13:19,NA
"

mydf <- read_csv(sample, col_types="Ti")
mydf
                 time    id
1 2015-03-05 02:28:11  1674
2 2015-03-03 13:10:59 36749
3 2015-03-05 07:55:48    NA
4 2015-03-05 06:13:19    NA
Run Code Online (Sandbox Code Playgroud)

这很好.但是,如果我想操作此列dplyr,则时间列将丢失其格式.

mydf %>% mutate(time = ifelse(is.na(id), NA, time))
        time    id
1 1425522491  1674
2 1425388259 36749
3         NA    NA
4         NA    NA
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

我知道我可以通过将它转换为字符来解决这个问题,但是如果不来回转换它会更方便.

mydf %>% mutate(time = as.character(time)) %>% 
    mutate(time = ifelse(is.na(id), NA, …
Run Code Online (Sandbox Code Playgroud)

r dplyr readr

11
推荐指数
1
解决办法
2413
查看次数

使用 Readr read_csv 函数抑制所有消息/警告

我正在创建一个 rmarkdown pdf 报告。我使用 readr 包中的 read_csv 函数在文件夹中导入一些 csv 文件。我使用 SuppressMessages/Warnings 函数来隐藏所有警告/消息,但在尝试导入多个文件时仍然收到如下消息:

似乎 SuppressMessages/Warnings 对解析警告不起作用。

## Parsed with column specification:
## cols(
## .default = col_character(),
## `Constant USD - Accrued Sum` = col_number(),
## `Units Sold Sum` = col_number()
## )
Run Code Online (Sandbox Code Playgroud)

由于该报告面向非技术受众,因此警告信息可能会分散注意力。我该怎么做才能不显示此消息?

markdown r suppress-warnings suppressmessage readr

11
推荐指数
3
解决办法
3552
查看次数

在r中抑制读者解析问题

我目前正在阅读使用该软件包的文件readr.我们的想法是使用read_delim行读取行来查找非结构化数据文件中的最大列.代码输出存在parsing问题.我知道这些并将在导入后处理列类型.是否有办法关闭,problems()因为通常options(warn)不工作

i=1
max_col <- 0
options(warn = -1)
while(i != "stop")
{
  n_col<- ncol(read_delim("file.txt", n_max = 1, skip = i, delim="\t"))
  if(n_col > max_col) {
    max_col <- n_col
    print(max_col)
  }
  i <- i+1
  if(n_col==0) i<-"stop"
}
options(warn = 0) 
Run Code Online (Sandbox Code Playgroud)

我试图压制的控制台输出如下:

.See problems(...) for more details.
Warning: 11 parsing failures.
row      col   expected  actual
  1 1####4 valid date 1###8
Run Code Online (Sandbox Code Playgroud)

r readr

10
推荐指数
2
解决办法
6713
查看次数

read_csv()解析错误信息,如何解释?

我正在解析大量的csv数据.数据相当"脏",因为我有不一致的分隔符,虚假字符和格式问题导致read_csv()出现问题.

然而,我的问题不是数据的肮脏,而只是试图理解read_csv()给我的解析错误.如果我能更好地理解错误消息,那么我可以做一些清洁工作来解决脚本问题.数据的大小使得手动方法难以处理.

这是一个最小的例子.假设我有一个像这样的csv文件:

"col_a","col_b","col_c"
"1","a quick","10"
"2","a quick "brown" fox","20"
"3","quick, brown fox","30"
Run Code Online (Sandbox Code Playgroud)

请注意,第二行的"棕色"周围有虚假引号.此内容将进入名为" my_data.csv " 的文件中.

当我尝试读取该文件时,我得到一些解析失败.

> library(tidyverse)
> df <- read_csv("./my_data.csv", col_types = cols(.default = "c"))
Warning: 2 parsing failures.
row # A tibble: 2 x 5 col     row   col           expected actual            file expected   <int> <chr>              <chr>  <chr>           <chr> actual 1     2 col_b delimiter or quote      b './my_data.csv' file 2     2 col_b delimiter or quote        './my_data.csv'
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,解析失败并非"非常印刷".这是一长271个字符.

我无法弄清楚甚至在故障消息中放置换行符以查看问题所在以及消息试图告诉我的内容.而且,它指的是"2x5 tibble".什么呀?我的数据框是3x3.

有人可以告诉我如何在read_csv()的消息中格式化或放置换行符,以便我可以看到它是如何检测问题的? …

csv parsing r readr tidyverse

10
推荐指数
1
解决办法
3686
查看次数

读取多个CSV文件的基数R比读取器快

有很多关于如何读取多个CSV并将它们绑定到一个数据帧的文档.我有5000多个CSV文件需要读入并绑定到一个数据结构中.

特别是我在这里的讨论:使用rbind将多个.csv文件加载到R中的单个数据帧中的问题

奇怪的是,基础R比我尝试过的任何其他解决方案都要快得多.

这是我的CSV的样子:

> head(PT)
  Line          Timestamp       Lane.01 Lane.02 Lane.03 Lane.04 Lane.05 Lane.06 Lane.07 Lane.08
1    PL1    05-Jan-16 07:17:36      NA      NA      NA      NA      NA      NA      NA      NA
2    PL1    05-Jan-16 07:22:38      NA      NA      NA      NA      NA      NA      NA      NA
3    PL1    05-Jan-16 07:27:41      NA      NA      NA      NA      NA      NA      NA      NA
4    PL1    05-Jan-16 07:32:43    9.98   10.36   10.41   10.16   10.10    9.97   10.07    9.59
5    PL1    05-Jan-16 07:37:45    9.65    8.87    9.88    9.86    8.85    8.75    9.19    8.51
6    PL1    05-Jan-16 …
Run Code Online (Sandbox Code Playgroud)

r readr tidyverse

9
推荐指数
1
解决办法
852
查看次数

read_csv 和 read.csv 之间有什么实际区别?什么时候应该使用其中一种而不是另一种?

我经常使用逗号分隔的值,并且对read_csv()和之间的差异感到好奇read.csv()

是否有任何实际差异可以揭示两者的情境使用?

csv r readr

9
推荐指数
2
解决办法
4287
查看次数

read_csv() 使用随机数做什么?

我只是注意到以read_csv()某种方式使用了出乎意料的随机数(至少对我而言)。相应的基本 R 函数read.csv()不会这样做。那么,read_csv()随机数有什么用呢?我查看了文档,但找不到明确的答案。随机数是否与guess_max参数有关?

library(tidyverse)
set.seed(123)
rnorm(1)
# [1] -0.5604756

set.seed(123)
dat <- read.csv("data/titanic.csv")
rnorm(1)
# [1] -0.5604756

set.seed(123)
dat <- read_csv("data/titanic.csv")
rnorm(1)
#[1] 1.239496
Run Code Online (Sandbox Code Playgroud)

编辑:

  1. 正如rawr的评论所建议的那样,我尝试指定col_types并且确实有效。但我仍然想知道为什么会发生这种情况。有人有解释吗?
set.seed(123)
dat <- read_csv("data/titanic.csv", col_types = c("dddccdddcdcc"))
rnorm(1)
#[1] -0.5604756
Run Code Online (Sandbox Code Playgroud)
  1. 由于很多人询问 R 和readr版本,这里是我的会话信息。
library(tidyverse)
set.seed(123)
rnorm(1)
# [1] -0.5604756

set.seed(123)
dat <- read.csv("data/titanic.csv")
rnorm(1)
# [1] -0.5604756

set.seed(123)
dat <- read_csv("data/titanic.csv")
rnorm(1)
#[1] 1.239496
Run Code Online (Sandbox Code Playgroud)

reprex 包( v2.0.0 )于 2021 年 …

r readr

8
推荐指数
1
解决办法
108
查看次数