通过read.csv / read.table防止变量名被破坏?

时间:2016-06-14 04:07:11

标签: r names read.csv

我的数据集testdata有两个名为PWGTPAGEP的变量

数据位于.csv文件中。

当我这样做时:

> head(testdata)

变量显示为

    ï..PWGTP AGEP
          23   55
          26   56
          24   45
          22   51
          25   54
          23   35

因此,出于某种原因,R正在将PWGTP作为ï..PWGTP阅读。没什么大不了的。

但是,当我使用某个函数来引用变量ï..PWGTP时,我收到了消息:

  

错误:数据中找不到id变量:ï..PWGTP

同样,当我使用某个函数来引用变量PWGTP时,我收到消息:

  

错误:数据中找不到id变量:PWGTP

2个问题:

  1. 我是否应该对源文件做些什么来防止变量名PWGTP的错误?

  2. ï..PWGTP重命名为其他内容应该是微不足道的 - 但R无法找到这样命名的变量。您对如何修复变量名称的看法?

2 个答案:

答案 0 :(得分:1)

这是一个BOM(字节顺序标记)UTF-8问题。

为防止这种情况发生,有2个选项:

  1. 将文件保存为UTF-8,无BOM /签名 - 或 -
  2. 使用fileEncoding = "UTF-8-BOM"read.table
  3. 时使用read.csv

    示例:

    mydata <- read.table(file = "myfile.txt", fileEncoding = "UTF-8-BOM")

答案 1 :(得分:0)

文件中的列名可能是1 PWGTP在数字(或其他)之间的空格以及在R中读取时导致..的字符。一种方法防止这种情况是在check.names = FALSE

中使用read.csv/read.table
d1 <- read.csv("yourfile.csv", header=TRUE, stringsAsFactors=FALSE, check.names=FALSE)

但是,最好不要让名字以数字开头或中间有空格。

因此,假设,如果OP使用默认选项(即使用check.names = TRUE)读取数据,我们可以使用sub更改列名称

names(d1) <- sub(".*\\.+", "", names(d1))

作为一个例子

sub(".*\\.+", "", "ï..PWGTP")
#[1] "PWGTP"