gpt4 book ai didi

使用 stringr 和 dplyr 重命名所有数据框列

转载 作者:行者123 更新时间:2023-12-02 15:02:13 25 4
gpt4 key购买 nike

我正在尝试使用 dplyrstringr 重命名数据框中的所有列,但它似乎没有按我希望的方式工作。我应该如何更改以下代码以获得我想要的输出(如下面的代码所示)?

这是完全可重现的代码:

library(dplyr)
library(stringr)
library(tibble)
library(rlang)

# dataframe
x <-
tibble::as.tibble(cbind(
Grace_neu_wrong = c(1:4),
Grace_acc_wrong = c(1:4),
Grace_att_wrong = c(1:4),
Grace_int_wrong = c(1:4)
))

# defining custom function to rename the entire dataframe in a certain way
string_conversion <- function(df, ...) {

# preparing the dataframe
df <- dplyr::select(.data = df,
!!rlang::quo(...))

# custom function to split the name of each column in a certain way
splitfn <- function(x) {
x <- as.character(x)
split <- stringr::str_split(string = x, pattern = "_")[[1]]
paste(split[2], split[3], '_', split[1], sep = '')
}

# applying the splitfn function to each column name and outputting the data frame
df_new <- df %>%
dplyr::select_all(.funs = colnames) %>%
dplyr::mutate_all(.funs = splitfn)

return(df_new)

}

# the output I get
string_conversion(df = x, names(x))
#> # A tibble: 4 x 4
#> Grace_neu_wrong Grace_acc_wrong Grace_att_wrong Grace_int_wrong
#> <chr> <chr> <chr> <chr>
#> 1 NANA_1 NANA_1 NANA_1 NANA_1
#> 2 NANA_1 NANA_1 NANA_1 NANA_1
#> 3 NANA_1 NANA_1 NANA_1 NANA_1
#> 4 NANA_1 NANA_1 NANA_1 NANA_1

# the output I desire
tibble::as.tibble(cbind(
neuwrong_Grace = c(1:4),
accwrong_Grace = c(1:4),
attwrong_Grace = c(1:4),
intwrong_Grace = c(1:4)
))
#> # A tibble: 4 x 4
#> neuwrong_Grace accwrong_Grace attwrong_Grace intwrong_Grace
#> <int> <int> <int> <int>
#> 1 1 1 1 1
#> 2 2 2 2 2
#> 3 3 3 3 3
#> 4 4 4 4 4

reprexpackage 创建于 2018-02-08 (v0.1.1.9000)。

最佳答案

您可以在不使用 mutate 的情况下在一行中执行此操作,mutate 应该用于列值而不是列名。相反,使用 stringr::str_replace 和正则表达式执行以下操作。

  1. 模式 "(.*)_(.*)_(.*)" 是由下划线分隔的三组字符。
  2. 我们只需进行替换 "\\2\\3_\\1",即第 2 组,然后是第 3 组,然后是下划线,然后是第 1 组,从而得到我们想要的结果。

因此代码只有一行:

names(x) <- str_replace(names(x), "(.*)_(.*)_(.*)", "\\2\\3_\\1")
print(x)
# A tibble: 4 x 4
neuwrong_Grace accwrong_Grace attwrong_Grace intwrong_Grace
<int> <int> <int> <int>
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4

关于使用 stringr 和 dplyr 重命名所有数据框列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48695533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com