防止变量名被读取破坏。csv/read.table?

Prevent variable name getting mangled by read.csv/read.table?

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

的变量

数据在 .csv 文件中。

当我这样做时:

> head(testdata)

变量显示为

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

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

然而,当我使用某些函数引用变量 ï..PWGTP 时,我收到消息:

Error: id variables not found in data: ï..PWGTP

同样,当我使用一些函数来引用变量 PWGTP 时,我得到消息:

Error: id variables not found in data: PWGTP

2 个问题:

  1. 我应该对源文件做些什么来防止变量名的混乱PWGTP

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

文件中的列名可能是 1 PWGTP i.e.with 数字(或其他内容)与读入时导致 .. 的字符之间的空格R. 防止这种情况的一种方法是在 read.csv/read.table

中使用 check.names = FALSE
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"

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

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

  1. 将您的文件保存为不带 BOM/签名的 UTF-8 -- 或 --
  2. 在使用read.tableread.csv时使用fileEncoding = "UTF-8-BOM"

示例:

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