首页 > 解决方案 > 带有特殊字符的整洁数据框

问题描述

我的 csv 格式数据集(可在此处获得)如下: 在此处输入图像描述

我尝试使用以下文档将数据导入 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。

标签: rdplyrreadr

解决方案


这是一个简单的解决方案。

将文件作为 .txt 文件读入:

编辑 1: 由于数据在某些单元格中包含主题标签 #,因此您需要包含参数comment.char="",以便 R 将显示其后面的数据(但它仍会将其视为评论的开始):

df <- read.table("[Your path]/Sample.txt", 
                   header = T, fill = T, quote="", sep="\t", comment.char="")

和其他人一样,我发现您的列标题非常不切实际,因此冒昧地将它们更改为字母表的前十一个字母(仅出于视觉原因;您将有理由保留标题):

colnames(df) <- LETTERS[1:11]
df
                                    A     B    C       D     E     F           G       H     I      J    K
1       Adams County, Nebraska(6,10)  31001 ***    62.1  51.4  74.6          25  stable  -5.2  -32.3  32.8
2   Adams County, North Dakota(6,10)  38001 ***       *      *    *  3 or fewer       *     *      *     *
3 Aiken County, South Carolina(6,10)  45003 ***    55.9  51.5  60.6         124  stable  -2.3   -8.8   4.6
4        Aitkin County, Minnesota(6)  27001  ***      ¶     ¶     ¶           ¶       ¶     ¶      ¶     ¶
5   Albemarle County, Virginia(6,10)  51003 ***    49.4  44.1  55.3          64  stable  -2.9  -18.1  15.2
6      Alcona County, Michigan(6,10)  26001 ***  66.1 #  51.2  86.7          17  stable  -3.6  -26.5  26.3

可以通过多种方式完成所需的转换;一种简单的方法是(分别转换两列):

df[,4] <- gsub("\\*|¶", NA, df[,4])
df[,9] <- gsub("\\*|¶", NA, df[,9])

这是一种稍微复杂但更经济的方法(一次转换两列):

df[,c(4,9)] <- lapply(df[,c(4,9)], function(x) gsub("\\*|¶", NA, x))

编辑 2: 如果您想删除数据中的主题标签,这将为 column 执行此操作D

df[,4] <- gsub(" #", "", df[,4])

如果您想在一系列列中删除 # ,请在该范围内设置子集df并使用lapply

df[,c([range])] <- lapply(df[,c([range])], function(x) gsub(" #", "", x))

输出是这样的:

df
                                    A     B    C     D     E     F           G       H     I      J    K
1       Adams County, Nebraska(6,10)  31001 ***  62.1  51.4  74.6          25  stable  -5.2  -32.3  32.8
2   Adams County, North Dakota(6,10)  38001 ***   <NA>     *    *  3 or fewer       *   <NA>     *     *
3 Aiken County, South Carolina(6,10)  45003 ***  55.9  51.5  60.6         124  stable  -2.3   -8.8   4.6
4        Aitkin County, Minnesota(6)  27001  ***  <NA>    ¶     ¶           ¶       ¶   <NA>     ¶     ¶
5   Albemarle County, Virginia(6,10)  51003 ***  49.4  44.1  55.3          64  stable  -2.9  -18.1  15.2
6      Alcona County, Michigan(6,10)  26001 ***  66.1  51.2  86.7          17  stable  -3.6  -26.5  26.3

推荐阅读