我的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。
答案 0 :(得分:1)
这是一个简单的解决方案。
以.txt文件的形式读取文件:
修改1:
由于数据在某些单元格中包含#号,因此您需要包含参数comment.char=""
,以便R将在其后显示数据(但是仍将其视为注释的开始):
df <- read.table("[Your path]/Sample.txt",
header = T, fill = T, quote="", sep="\t", comment.char="")
与其他人一样,我发现您的列标题非常不切实际,并随意将其更改为字母表的前11个字母(仅出于视觉原因;您将有保留标题的理由):
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