用于更改R中变量名称的功能
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于更改R中变量名称的功能相关的知识,希望对你有一定的参考价值。
我有一个数据集,其中的命名约定很差,我正在努力寻找一种自动执行名称更改过程的方法。数据示例如下所示:
x1 <- rnorm(10)
x2 <- rnorm(10)
y <- rnorm(10)
x11 <- rnorm(10)
x3 <- rnorm(10)
y1 <- rnorm(10)
x21 <- rnorm(10)
x31 <- rnorm(10)
data <- data.frame(x1, x2, y, x11, x3, y1, x21, x31)
head(data,2)
这将输出如下所示的数据框:
x1 x2 y x11 x3 y1
1 -0.9071106 0.6852567 0.7185932 -0.1943458 1.71832739 0.1568951
2 -0.4592129 -0.3567014 -0.3137624 0.9683101 -0.15601160 0.8513820
x21 x31
1 0.6160399 -1.3877095
2 -1.0286380 -1.6583842
我想做的是将每个x列的名称更改为,将其更改为x旁边出现的第一个数字。例如,x11列应仅读取x1 ...,而x21列应仅读取x2。我可以通过执行以下操作来手动更改每个名称来实现此目的:
names(data)[startsWith(names(data), "y")] <- "y"
names(data)[startsWith(names(data), "x1")] <- "x1"
names(data)[startsWith(names(data), "x2")] <- "x2"
names(data)[startsWith(names(data), "x3")] <- "x3"
head(data,2)
哪个输出:
x1 x2 y x1 x3 y
1 -0.9071106 0.6852567 0.7185932 -0.1943458 1.7183274 0.1568951
2 -0.4592129 -0.3567014 -0.3137624 0.9683101 -0.1560116 0.8513820
x2 x3
1 0.6160399 -1.387709
2 -1.0286380 -1.658384
但是我正在努力编写一个函数来对整个数据集执行此操作。另外,我意识到这将导致具有多个x1,x2(等)列...但是出于我的目的,我需要像这样的数据。
关于id如何编写此功能的任何建议?
答案
我们可以使用sub
来捕获字母,后跟数字作为组,并用所捕获组的后向引用(\1
代替]
names(data) <- sub("^([xy]\d)\d$", "\1", names(data))
names(data)
#[1] "x1" "x2" "y" "x1" "x3" "y1" "x2" "x3"
如果为data.frame
,将不支持重复的列名,因为对make.unique
进行了检查。但是,如果它是matrix
,则可以具有重复的列名
如果要通过data.frame
调用进行创建,另一个选择是使用check.names = FALSE
data <- data.frame(x1, x2, y, x1 = x11, x3, y1, x2 = x21,
x3 = x31, check.names = FALSE)
但是,不建议使用重复的列名,因为这可能导致在提取具有列名的列时遇到麻烦
以上是关于用于更改R中变量名称的功能的主要内容,如果未能解决你的问题,请参考以下文章