我正在尝试在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]代替吗?
谢谢!
答案 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
这样做。除非您明确地想要因素,否则最好将此作为默认值使用。