为什么R将列名中的特殊字符更改为点

时间:2017-09-26 23:30:33

标签: r columnname

我有一个更大的数据集,当我导入R时,列名称包含,和不同类型的特殊字符。

当我将此数据集用作另一个变量的副本或作为另一个较小数据的子集或使用来自相同较大数据集的数据和列名执行不同类型的数据转换时,列名中的所有特殊字符都将更改为.

有没有办法在列名中保留特殊字符?我不希望R更改有关列名的任何内容。

请提出解决方案。

示例

> library(MASS)
> data(cats)
> cats <- cats[1:10,]
> cats
   Sex Bwt Hwt
1    F 2.0 7.0
2    F 2.0 7.4
3    F 2.0 9.5
4    F 2.1 7.2
5    F 2.1 7.3
6    F 2.1 7.6
7    F 2.1 8.1
8    F 2.1 8.2
9    F 2.1 8.3
10   F 2.1 8.5
> colnames(cats) <- c("A:17272,,1,MPR.rtn_rslt", "B:17272,,1,MPR.rtn_rslt", "C:17272,,1,MPR.rtn_rslt")
> cats
   A:17272,,1,MPR.rtn_rslt B:17272,,1,MPR.rtn_rslt C:17272,,1,MPR.rtn_rslt
1                        F                     2.0                     7.0
2                        F                     2.0                     7.4
3                        F                     2.0                     9.5
4                        F                     2.1                     7.2
5                        F                     2.1                     7.3
6                        F                     2.1                     7.6
7                        F                     2.1                     8.1
8                        F                     2.1                     8.2
9                        F                     2.1                     8.3
10                       F                     2.1                     8.5

cats数据集的列名称包含特殊字符,:。下面,我正在进行数据转换。

> # Define the avector-subselection method
> as.data.frame.avector <- as.data.frame.vector
> `[.avector` <- function(x,i,...) {
+   r <- NextMethod("[")
+   mostattributes(r) <- attributes(x)
+   r
+ }

> # Preserve attributes as they are lost due to subet
> test <- data.frame(
+   lapply(cats, function(x) {
+     structure( x, class = c("avector", class(x) ) )
+   } )
+ )

> test
   A.17272..1.MPR.rtn_rslt B.17272..1.MPR.rtn_rslt C.17272..1.MPR.rtn_rslt
1                        F                     2.0                     7.0
2                        F                     2.0                     7.4
3                        F                     2.0                     9.5
4                        F                     2.1                     7.2
5                        F                     2.1                     7.3
6                        F                     2.1                     7.6
7                        F                     2.1                     8.1
8                        F                     2.1                     8.2
9                        F                     2.1                     8.3
10                       F                     2.1                     8.5

以上转换会导致来自test的新数据cats,将:,等所有特殊字符更改为.

1 个答案:

答案 0 :(得分:2)

尝试:

test <- data.frame(lapply(cats, function(x) {
        structure(x, class = c("avector", class(x)))
}), check.names = FALSE)

您必须使用引号或在某些情况下使用格式反向引用名称,但最好重命名整个数据框。