R - 在数据框中的列中选择特定字符并替换它的函数

时间:2016-12-13 09:55:49

标签: r function

我正在尝试在R中创建一个带有四个参数的函数,即: 数据框,数字,字符1和字符2.

我想要输出的是:

test_df <- data.frame(col1 = c("matt", "baby"), col2 = c("john", "luck"))

my_function(test_df, 1, "u", "o")

col1 col2
mutt john
buby luck

我只是想知道如何具体定义用户输入的[number]列的功能?对于重命名,我想函数rename()会很好。我需要用[x,x]代替吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果必须创建一个以列为参数的函数,则需要拆分数据框和列规范(使用gsub()进行实际替换):

my_function <- function(df, column, pattern, replacement) {

  gsub(pattern, replacement, df[[column]])

}

哪个会像:

my_function(df = test_df, column = 1, pattern = "a", replacement = "u")
## [1] "mutt" "buby"

但是,这有一个缺点,如果你想循环遍历多个列,例如使用lapply(),列表规范会变得更复杂:

test_df[] <- lapply(colnames(test_df), my_function, df = test_df, pattern = "a", replacement = "u")
test_df
#   col1 col2
# 1 mutt john
# 2 buby luck

比这更复杂:

test_df   <- data.frame(test_df, stringsAsFactors = FALSE)
test_df[] <- lapply(test_df, gsub, pattern = "a", replacement = "u")
test_df
#   col1 col2
# 1 mutt john
# 2 buby luck

(注意:请确保stringsAsFactors = FALSE这样做。除非您明确地想要因素,否则最好将此作为默认值使用。