r - R中更改变量名称的函数

标签 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 (等)列...但出于我的目的,我需要这样的数据。

关于如何编写这个函数有什么建议吗?

最佳答案

我们可以使用 sub 来捕获字母和数字作为一组,并替换为捕获组的反向引用(\\1)

names(data) <- sub("^([xy]\\d)\\d$", "\\1", names(data))
names(data)
#[1] "x1" "x2" "y"  "x1" "x3" "y1" "x2" "x3"

或者删除数字后面的最后一个数字

sub("(?<=\\d)(\\d)$", "", names(data), perl = TRUE)

如果它是一个data.frame,它不支持重复的列名,因为会使用make.unique进行检查。但是,如果它是一个矩阵,它可以有重复的列名


如果我们使用 data.frame 调用创建,另一个选择是使用 check.names = FALSE

data <- data.frame(x1, x2, y, x1 = x11, x3, y1, x2 = x21,
         x3 = x31, check.names = FALSE)

但是,不建议使用重复的列名,因为这可能会导致提取具有列名的列时出现问题

关于r - R中更改变量名称的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59242150/

相关文章:

r - 将日期字符串 "yyyy-mm-dd"转换为自纪元以来的毫秒数

r - 如何从 R 中的数据框中获取唯一对?

加载库时 R rgl 包错误

r - ggplot,方面,饼图 : placing text in the middle of pie chart slices

r - 在 R 中使用复制函数时出现错误/警告

r - 链接 ifelse 语句的智能方法?

r - 使用 dplyr 按组计算行数

html - Shiny - 有条件地更改 htmlOutput 的背景颜色

python - 寻找一种算法来计算可能模式的数量

r - 按 ggplot 中躲避位置的因素分组