【发布时间】:2019-12-25 15:49:10
【问题描述】:
我的csv格式数据集(here可用)如下:
我尝试使用以下文档将数据导入 R:
library(tidyverse)
data <- read_csv("<Path to file>\\Sample.csv")
当我尝试使用data$ 提取列时,出现错误:
Error in gsub(reStrip, "", completions, perl = TRUE) :
input string 4 is invalid UTF-8
我的数据的 D 列包含数字和特殊字符 * 以及 Pilcrow 符号。此列的最后一行中的数字是 66.1,但后面是 #。同样,第一列包含 * 和 Pilcrow 符号。
我想清理数据,以便对于列 D 和 I,将带有 * 和 Pilcrow 符号的行替换为 NA。另外,“66.1#”转换为“66.1”。
我想知道如何将 csv 文件导入 R 并将其清理为 R 中所需的格式。最好使用 tidyverse。
【问题讨论】:
-
我的猜测是这与任何 tidyverse 包无关,而是您使用非标准(可以说是无效的)列名的事实。首先修复这些:删除空格和特殊字符。许多 SO 帖子已经涵盖了这一点,包括 this one。最好在问题中创建一个reproducible example,而不是我们必须下载外部数据
-
数据是从外部数据库下载的,我故意保留列名。我有很多数据集。如果我可以直接在 R 中使用它们而不必为每个数据集重命名列,那会更有效率。正如我所提到的,我更喜欢 tidyverse 的解决方案,但任何其他解决方案都可以。有了提供的数据,任何人都可以复制我的错误。虽然数据存放在别处,但错误无疑是可重现的。另外,提供的数据集是复制的最小数据集,符合可重现示例的精神。谢谢
-
链接
https://raw.githubusercontent.com/Patricklv/Dataframe-with-special-characters/master/Sample.csv上的 CSV 似乎没有 Pilcrow 符号——我在那里看到问号。你觉得它不一样吗? -
值中的 pilcrow 对
readr::read_csv(path, col_names = F)来说不是问题。您甚至可以毫无问题地将列名作为文本读取。但到目前为止,我尝试过的任何命名版本都不会让这些名称设置在结果数据框上(setNames、purrr::set_names、magrittr::set_colnames)。 -
我关于它不是 tidyverse 特定的评论是我删除 tidyverse 标签的原因,因为这些问题与给出的何时使用该标签的指导不符。此外,并不是要更改文件中的列名,因为无论如何这都是错误的形式。你说当你尝试
data$时会出现问题,所以我的意思是在做类似的事情之前修复列名