防止变量名被读取破坏。csv/read.table?
Prevent variable name getting mangled by read.csv/read.table?
我的数据集 testdata
有两个名为 PWGTP
和 AGEP
的变量
数据在 .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 个问题:
我应该对源文件做些什么来防止变量名的混乱PWGTP
?
将 ï..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 个选项:
- 将您的文件保存为不带 BOM/签名的 UTF-8 -- 或 --
- 在使用
read.table
或read.csv
时使用fileEncoding = "UTF-8-BOM"
示例:
mydata <- read.table(file = "myfile.txt", fileEncoding = "UTF-8-BOM")
我的数据集 testdata
有两个名为 PWGTP
和 AGEP
数据在 .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 个问题:
我应该对源文件做些什么来防止变量名的混乱
PWGTP
?将
ï..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 个选项:
- 将您的文件保存为不带 BOM/签名的 UTF-8 -- 或 --
- 在使用
read.table
或read.csv
时使用fileEncoding = "UTF-8-BOM"
示例:
mydata <- read.table(file = "myfile.txt", fileEncoding = "UTF-8-BOM")