R语言 将相同的函数应用于更改列名的字母大小写

yptwkmov  于 2023-02-01  发布在  其他
关注(0)|答案(2)|浏览(163)

我有一个包含两个data.frames的嵌套列表,我想将所有变量名和变量类别更改为大写

my_list <- list(my_name = data.frame(c("Juan", "CArlos", "RRicardo")),
                my_data = data.frame(c("Lunes", "Martes", "Miercoles")))

我想要的结果是

$MY_NAME
c..JUAN....CARLOS....RRICARDO..
1                            JUAN
2                          CARLOS
3                        RICARDO

$MY_DATA
c..LUNES....MARTES....MIERCOLES..
1                             LUNES
2                            MARTES
3                         MIERCOLES
k4emjkb1

k4emjkb11#

我们可以遍历list,并将toupper应用于names以及list的列值和名称

setNames(lapply(my_list, \(x) {
      x[] <- lapply(x, toupper)
      names(x) <- toupper(names(x))
       x}), 
    toupper(names(my_list)))
  • 输出
$MY_NAME
  C..JUAN....CARLOS....RRICARDO..
1                            JUAN
2                          CARLOS
3                        RRICARDO

$MY_DATA
  C..LUNES....MARTES....MIERCOLES..
1                             LUNES
2                            MARTES
3                         MIERCOLES
kpbpu008

kpbpu0082#

我们需要调用toupper三次,来替换names of the data.framesnames of the individual data.frame columnsvalues in each column。我们可以使用tidyverse:

library(dplyr)
library(purrr)

my_list %>%
    map(~mutate(.x, across(where(is.character), toupper)) %>% #values in each column
            rename_with(toupper)) %>% # names of the individual data.frame columns
    set_names(toupper(names(.))) #names of the data.frames

$MY_NAME
  C..JUAN....CARLOS....RRICARDO..
1                            JUAN
2                          CARLOS
3                        RRICARDO

$MY_DATA
  C..LUNES....MARTES....MIERCOLES..
1                             LUNES
2                            MARTES
3                         MIERCOLES

添加where(is.character)部分是为了安全,我们可以通过用across(.fns=toupper)替换原来对across()的调用来避免这种情况

相关问题