R 使用特殊字符整理数据帧

R 使用特殊字符整理数据帧,r,dplyr,readr,R,Dplyr,Readr,我的csv格式数据集(可用)如下所示: 我尝试使用以下文档将数据导入R: library(tidyverse) data <- read_csv("<Path to file>\\Sample.csv") 我的数据的D列包含数字和特殊字符*以及皮尔克罗符号。此列最后一行中的数字为66.1,但后跟#。类似地,列I包含*和皮尔克罗符号 我想清理数据,以便对于D列和I列,带*的行和Pilcrow符号替换为NA。此外,“66.1#”转换为“66.1” 我想要的表格如下: 我想知道

我的csv格式数据集(可用)如下所示:

我尝试使用以下文档将数据导入R:

library(tidyverse)
data <- read_csv("<Path to file>\\Sample.csv")
我的数据的D列包含数字和特殊字符*以及皮尔克罗符号。此列最后一行中的数字为66.1,但后跟#。类似地,列I包含*和皮尔克罗符号

我想清理数据,以便对于D列和I列,带*的行和Pilcrow符号替换为NA。此外,“66.1#”转换为“66.1”

我想要的表格如下:


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

这里有一个简单的解决方案

以.txt文件的形式读入文件:

编辑1: 由于数据在某些单元格中包含hashtag#,因此需要包含参数
comment.char=“”
,以便R将在其后面显示数据(但仍将其视为注释的开头):

如果要在一系列列中去掉#,请在该范围上子集
df
,并使用
lappy

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

df[,c([range])]我猜这与任何tidyverse软件包无关,而是使用了非标准(可以说是无效的)列名。首先解决这些问题:删除空格和特殊字符。很多SO帖子已经涵盖了这一点,包括。您最好在问题中创建一个,而不是我们必须下载外部数据。数据是从外部数据库下载的,我有意保留列名。我有很多数据集。如果我可以在R中直接使用它们,而不必为每个数据集重命名列,那么效率会更高。正如我提到的,我更喜欢tidyverse的解决方案,但任何其他解决方案都可以。有了提供的数据,任何人都可以复制我的错误。尽管数据存放在其他地方,但误差无疑是可重复的。此外,提供的数据集是用于复制的最小数据集,这符合可复制示例的精神。THX链接中的CSV
https://raw.githubusercontent.com/Patricklv/Dataframe-with-special-characters/master/Sample.csv
似乎没有皮尔克罗符号——我在那里看到问号。对于您来说,它看起来不同吗?对于
readr::read\u csv(path,col\u names=F)
,值中的pilcrow不是问题。您甚至可以毫无问题地将列名作为文本读入。但到目前为止,我尝试过的命名版本都不允许在生成的数据帧上设置这些名称(
setNames
purr::set_names
magrittr::set_colnames
)。我关于它不是特定于tidyverse的评论是我删除标记的原因,因为问题与给出的何时使用该标签的指导不匹配。另外,我并不想更改文件中的列名,因为这无论如何都是不好的形式。您说过当您尝试
data$
时会出现问题,所以我的意思是在执行类似操作之前先修复列名谢谢Chris。我可以用R中的代码重命名列。您的解决方案解决了将*和pilcrow符号转换为NA的问题。但从E列开始的最后一行中缺少所有值。还有什么想法吗?这一点很重要,因为从数据库下载的数据集中的某些行在D列中的数字后有“#”(在#符号前有空格)。从E列开始的数据丢失,因为E列中的数据字符串以
结尾。
!R将该字符理解为注释的开始,它既不被视为数据也不被视为代码。如果删除.txt文件中的字符,则读取完成。如果数据中有许多单元格带有#,则有一个更好的解决方案:查看我的编辑
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))
df[,4] <- gsub(" #", "", df[,4])
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