r - 使用 R 中 readr 包中的 read_csv 导入不带引号的字符串作为因子

标签 r string import readr

我有一个包含许多列的 .csv 数据文件。不幸的是,字符串值没有引号(即 apples i.o. "apples")。当我使用 readr 包中的 read_csv 时,字符串值作为字符导入:

library(readr)

mydat = data.frame(first = letters, numbers = 1:26, second = sample(letters, 26))
write.csv(mydat, "mydat.csv", quote = FALSE, row.names = FALSE)

read_csv("mydat.csv")

结果是:
Parsed with column specification:
cols(
  first = col_character(),
  numbers = col_integer(),
  second = col_character()
)
# A tibble: 26 x 3
   first numbers second
   <chr>   <int>  <chr>
1      a       1      r
2      b       2      n
3      c       3      m
4      d       4      z
5      e       5      p
6      f       6      j
7      g       7      u
8      h       8      l
9      i       9      e
    10     j      10      h
    # ... with 16 more rows

有没有办法强制 read_csv 将字符串值作为因子导入 i.o.人物?

重要的是,我的数据文件有很多列(字符串和数字变量),AFAIK,无法通过提供带有 col_types 参数的列规范来完成这项工作。

替代解决方案(例如,使用 read.csv 导入数据,或使用 dplyr 代码将数据框中的所有字符变量更改为因子)也很受欢迎。

更新:我了解到 csv 文件中的值是否有引号对 read.csv 或 read_csv 没有区别。 read.csv 将这些值作为因子导入; read_csv 会将它们作为字符导入。我更喜欢使用 read_csv,因为它比 read.csv 快得多。

最佳答案

此函数使用 dplyr 将 tbl_df 或数据框中的所有字符列转换为因子:

char.to.factors <- function(df){
  # This function takes a tbl_df and returns same with any character column converted to a factor

  require(dplyr)

  char.cols = names(df)[sapply(df, function(x) {class(x) == "character" })]
  tmp = mutate_each_(df, funs(as.factor), char.cols)
  return(tmp)
}

关于r - 使用 R 中 readr 包中的 read_csv 导入不带引号的字符串作为因子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40367163/

相关文章:

r - 将多因素方差分析 [TRAMINER] 导出到 latex

r - 创建描述特定值的现有索引位置的新变量

c++ - std:string::substr 是异常安全的吗?

excel - 添加唯一 ID 字段以识别使用 VBA 从不同 Excel 文件导入的电子表格

c++ - Assimp导入导出格式错误

html - R&Knitr html输出: Create collapsing and expanding header

r - 如何从 2 个或更多矩阵的所有可能组合创建矩阵?

c# - 如何用逗号字符分隔字符串?

python - str.encode 期望输入什么?

python 导入站点失败