r:如何根据每个列名称的后缀同时更改多个列名称

克里米亚

我收到了p从注册表自动生成的数据表,其中包含1855列。自动生成会_vX自动将其添加到每个列名称,其中X对应于后续操作的数量。不幸的是,这会创建可笑的长列名。

例如

p$MRI_v1_v2_v3_v4_v5_v6_v7_v8_v9_v10p$MRI_v1_v2_v3_v4_v5_v6_v7_v8_v9_v10_v11_v12_v13_v14_v15_v16_v17_v18_v19_v20

对应于同一位患者的第10次和第20次MRI扫描。即,处理与第十次随访相关的临床参数的每一列均以结束v1_v2_v3_v4_v5_v6_v7_v8_v9_v10

我寻求一个解决方案,最好在dplyr或中function,将整个_v1_v2_...."后缀更改fuX为与第x次跟进相对应。

可以这样说p

  a_v2 b_v2_v3 a_v2_v3_v4 b_v1_v2_v3_v4_v5_v6_v7_v8_v9_v10_v11_v12_v13_v14_v15_v16_v17_v18_v19_v20 a_v1_v2_v3_v4_v5_v6_v7_v8_v9_v10_v11_v12_v13_v14_v15_v16_v17_v18_v19_v20
1    0       1          1                                                                        1                                                                        0
2    1       1          0                                                                        1                                                                        0

预期产量:

> p
  a_fu2 b_fu3 a_fu4 b_fu20 a_fu20
1     0     1     1      1      0
2     1     1     0      1      0

数据

p <- structure(list(dia_maxrd_v2 = c(0, 1), hear_sev_v2_v3 = c(1, 1), reop_ind_v2_v3_v4___1 = c(1, 
0), neuro_def_v1_v2_v3_v4_v5_v6_v7_v8_v9_v10_v11_v12_v13_v14_v15_v16_v17_v18_v19_v20 = c(1, 
1), symp_pre_lokal_v1_v2_v3_v4_v5_v6_v7_v8_v9_v10_v11_v12_v13_v14_v15_v16_v17_v18_v19_v20 = c(0, 
0)), class = "data.frame", row.names = c(NA, -2L))

编辑

为了使事情复杂化,某些列名称以“ ___1”结尾,表示与该临床参数有关的特定参数,应予以保留,例如:_v1_v2_v3_v4___1因此,这仍应被视为,fu4并且___1不应省略部分。

  a_v2 b_v2_v3 a_v2_v3_v4___1 b_v1_v2_v3_v4_v5_v6_v7_v8_v9_v10_v11_v12_v13_v14_v15_v16_v17_v18_v19_v20 a_v1_v2_v3_v4_v5_v6_v7_v8_v9_v10_v11_v12_v13_v14_v15_v16_v17_v18_v19_v20
1    0       1              1                                                                        1                                                                        0
2    1       1              0                                                                        1                                                                        0                                                                      

预期产量:

> p
  a_fu2 b_fu3 a_fu4___1 b_fu20 a_fu20
1     0     1     1          1      0
2     1     1     0          1      0

编辑

抱歉,该解决方案必须考虑“基本”列名称,该名称指定该列包含的参数,例如手术后并发症。它是唯一_v1_v2_v3..._vX,应与相应的被取代-part fuX什么来之前之后_v1_v2_v3..._vX双组分必须保留。

考虑

  dia_maxrd_v2 hear_sev_v2_v3 reop_ind_v2_v3_v4___1 neuro_def_v1_v2_v3_v4_v5_v6_v7_v8_v9_v10_v11_v12_v13_v14_v15_v16_v17_v18_v19_v20 symp_pre_lokal_v1_v2_v3_v4_v5_v6_v7_v8_v9_v10_v11_v12_v13_v14_v15_v16_v17_v18_v19_v20
1            0              1                     1                                                                                1                                                                                     0
2            1              1                     0                                                                                1                                                                         0             
                                                                                                                                        

预期产量:

> p
  dia_maxrd_fu2 hear_sev_fu3 reop_ind_fu4___1 neuro_def_fu20 symp_pre_lokal_fu20
1             0            1                1              1          0
2             1            1                0              1              0
艾伦·卡梅伦

您可以使用gsub两个捕获组:

names(p) <- gsub("^(.).*?(\\d+)$", "\\1_fu\\2", names(p))

p
#>   a_fu2 b_fu3 a_fu4 b_fu20 a_fu20
#> 1     0     1     1      1      0
#> 2     1     1     0      1      0

编辑

OP规定了新的要求,即在管道中包含一些不属于原始问题的不同末端:

p %>% setNames(gsub("^(.).*?(\\d+_*\\d*)$", "\\1_fu\\2", names(.)))
#>   a_fu2 b_fu3 a_fu4___1 b_fu20 a_fu20
#> 1     0     1         1      1      0
#> 2     1     1         0      1      0

编辑

对于任意的起始字符串,可能最容易gsub两次:

p %>% setNames(gsub("(\\d{1,2}_v)+", "", names(.))) %>%
      setNames(gsub("_v(\\d+)", "_fu\\1", names(.)))

#>   dia_maxrd_fu2 hear_sev_fu3 reop_ind_fu4___1 neuro_def_fu20
#> 1             0            1                1              1
#> 2             1            1                0              1
#>   symp_pre_lokal_fu20
#> 1                   0
#> 2                   0

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据匹配的名称更改列名称

来自分类Dev

根据匹配的名称更改列名称

来自分类Dev

更改多个列名称,粘贴在列名称的开头/结尾

来自分类Dev

如何根据条件更改列表中多个数据框中的列名称?

来自分类Dev

r:如何同时替换多个列名称中的相同特定部分

来自分类Dev

在SQL视图中更改多个列名称

来自分类Dev

在R中的多个数据框中的列名称上添加不同的后缀

来自分类Dev

ExcelDataReader更改列名称

来自分类Dev

如何对列名称进行分组并为它们添加后缀?

来自分类Dev

如何获取多个列名称的位置

来自分类Dev

使用索引号同时更改pandas数据框中的多个列名称(并非所有colmn名称)

来自分类Dev

通过名称而不是数字更改R中的列名称

来自分类Dev

当列名称不同时,如何通过选择特定的列来组合多个数据框

来自分类Dev

如何在更改列名称的同时正确读取Ps中的csv

来自分类Dev

根据表名称选择查询列名称

来自分类Dev

根据列名称的多个条件提取数据框列

来自分类Dev

在MariaDB中更改列名称

来自分类Dev

更改CSV文件列名称

来自分类Dev

使用特定原理图更改多个列名称

来自分类常见问题

如何为每个列名添加后缀(或前缀)?

来自分类Dev

有什么方法可以使用tidyverse R通过升序更改多个列名称?

来自分类Dev

R:根据行和列名称添加矩阵

来自分类Dev

根据R中的列名称合并数据框

来自分类Dev

R-汇总和范围的输出为每个列名称提供2列-如何重组?

来自分类Dev

如何在R中将列表(拆分输出)转换为逻辑数据帧(根据列名称)

来自分类Dev

R中的数字列名称

来自分类Dev

循环功能列名称R

来自分类Dev

循环功能列名称R

来自分类Dev

用R中的所有列名称替换多个句点

Related 相关文章

  1. 1

    根据匹配的名称更改列名称

  2. 2

    根据匹配的名称更改列名称

  3. 3

    更改多个列名称,粘贴在列名称的开头/结尾

  4. 4

    如何根据条件更改列表中多个数据框中的列名称?

  5. 5

    r:如何同时替换多个列名称中的相同特定部分

  6. 6

    在SQL视图中更改多个列名称

  7. 7

    在R中的多个数据框中的列名称上添加不同的后缀

  8. 8

    ExcelDataReader更改列名称

  9. 9

    如何对列名称进行分组并为它们添加后缀?

  10. 10

    如何获取多个列名称的位置

  11. 11

    使用索引号同时更改pandas数据框中的多个列名称(并非所有colmn名称)

  12. 12

    通过名称而不是数字更改R中的列名称

  13. 13

    当列名称不同时,如何通过选择特定的列来组合多个数据框

  14. 14

    如何在更改列名称的同时正确读取Ps中的csv

  15. 15

    根据表名称选择查询列名称

  16. 16

    根据列名称的多个条件提取数据框列

  17. 17

    在MariaDB中更改列名称

  18. 18

    更改CSV文件列名称

  19. 19

    使用特定原理图更改多个列名称

  20. 20

    如何为每个列名添加后缀(或前缀)?

  21. 21

    有什么方法可以使用tidyverse R通过升序更改多个列名称?

  22. 22

    R:根据行和列名称添加矩阵

  23. 23

    根据R中的列名称合并数据框

  24. 24

    R-汇总和范围的输出为每个列名称提供2列-如何重组?

  25. 25

    如何在R中将列表(拆分输出)转换为逻辑数据帧(根据列名称)

  26. 26

    R中的数字列名称

  27. 27

    循环功能列名称R

  28. 28

    循环功能列名称R

  29. 29

    用R中的所有列名称替换多个句点

热门标签

归档