编写一个函数,读取 str_remove 中的 y 列和文本“y”

问题描述 投票:0回答:1

我正在 R 中编写一个函数来进行一些代码清理,其中涉及删除字符串中的一些文本。我有以下数据框:

x <- c(1, 2, 3, 4, 5)
y <-c("y_a","y_b","y_c","y_d","y_e")
z <-c("z_f","z_g","z_h","z_i","z_j")
df <- (x, y, z)

我正在尝试分别清除 y 列和 z 列中的 y_ 和 z_。

通常我会写成

df <- df %>%
mutate(y=str_remove(y,"y_"))

但我想写一个函数,这样我就可以重复。现在我的功能看起来像:

remove_weird_letter <- function(LETTER) {
mutate(LETTER=str_remove(LETTER,"LETTER_"))
}

df <- remove_weird_letter(y)
df <- remove_weird_letter(z)

但是它并没有将“LETTER”视为对函数中对象的引用,因此它没有删除它需要的内容。如何修改我的语法,以便它知道引用名为 LETTER 的列和包含 LETTER 的文本?

谢谢!

r string function dplyr stringr
1个回答
0
投票

这里有一个方法。
该函数接受列名称和要从字符串开头删除的一个或多个字母。

suppressPackageStartupMessages(
  library(dplyr)
)

remove_weird_letter <- function(x, LETTER) {
  pattern <- paste0(LETTER, "_") |> paste(collapse = "|")
  stringr::str_remove(x, pattern)
}

x <- c(1, 2, 3, 4, 5)
y <-c("y_a","y_b","y_c","y_d","y_e")
z <-c("z_f","z_g","z_h","z_i","z_j")
df <- data.frame(x, y, z)

df %>%
  mutate(across(y:z, ~ remove_weird_letter(.x, c("y", "z"))))
#>   x y z
#> 1 1 a f
#> 2 2 b g
#> 3 3 c h
#> 4 4 d i
#> 5 5 e j

创建于 2023-10-31,使用 reprex v2.0.2

© www.soinside.com 2019 - 2024. All rights reserved.