带有特殊字符的整洁数据框

Tidy dataframes with special characters

我的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”。

我想要的table如下:

我想知道如何将 csv 文件导入 R 并将其清理为 R 中所需的格式。最好使用 tidyverse。

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

Read-in 文件为 .txt 文件:

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

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

与其他人一样,我发现您的专栏 headers 非常不切实际,并冒昧地将它们更改为字母表的前 11 个字母(仅出于视觉原因;您将有理由保留您的 headers):

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: 如果您想摆脱数据中的主题标签,这将针对列 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