我有幾個 data.frames,我想對這些列應用一些轉換。
我首先做的是這樣的:
require(dplyr)
df_1 = data.frame(
'a' = c('aa.aa', 'aa..a/a', 'aaa aa.'),
'b' = c('b..b/', 'bbb./b', '..bb/--b'),
'c' = c('ccc', 'cc/cc', 'ccc.-cc')
)
df_1
df_2 = data.frame(
'a' = c('aa.a..a', '//aa..a/a', 'aaa aa.'),
'b' = c('b../b/', 'bbb./b', '..bb/--b'),
'c' = c('cc//c', 'cc/c/c', 'c//cc.-cc')
)
df_2
# df_3, df_4, df_5, ...
# remove '.', ' ', '/', '-'
# replace with '_'
df_new <- df_1 %>%
mutate(a = toupper(a),
a = gsub('\\.', '_', a),
a = gsub('/', '_', a),
a = gsub(' ', '_', a),
a = gsub('-', '_', a))
df_new
Output:
> df_new
a b c
1 AA_AA b..b/ ccc
2 AA__A_A bbb./b cc/cc
3 AAA_AA_ ..bb/--b ccc.-cc
我從 df_1 的“a”列中洗掉了每個特殊字符。但是我想在其他列上執行這些操作,所以我在考慮這樣的函式:
remove_special_characters <- function(df, var) {
df_new <- df %>%
mutate(var = gsub('\\.', '_', var),
var = gsub('/', '_', var),
var = gsub(' ', '_', var),
var = gsub('-', '_', var))
df_new
}
remove_special_characters(df_1, a)
Output:
Error: Problem with `mutate()` column `var`.
i `var = gsub("\\.", "_", var)`.
x object 'a' not found
Run `rlang::last_error()` to see where the error occurred.
remove_special_characters(df_2, b)
Output
Error: Problem with `mutate()` column `var`.
i `var = gsub("\\.", "_", var)`.
x object 'b' not found
Run `rlang::last_error()` to see where the error occurred.
# ...
但這不起作用。我查找原因,發現 mutate 函式使用了資料屏蔽。我搜索了一些解決方案,如下所示:
在 `dplyr` 中使用動態變數名
但這并不能解決我的問題。
有沒有辦法創建一個執行此操作的函式?
uj5u.com熱心網友回復:
您需要使用 進行評估!!,也需要通過以下方式進行分配:=:
remove_special_characters <- function(df, var) {
df_new <- df %>%
mutate({{var}} := toupper({{var}}),
{{var}} := gsub('\\.', '_', {{var}}),
{{var}} := gsub('/', '_', {{var}}),
{{var}} := gsub(' ', '_', {{var}}),
{{var}} := gsub('-', '_', {{var}}))
df_new
}
前任:
> remove_special_characters(df_1, a)
a b c
1 AA_AA b..b/ ccc
2 AA__A_A bbb./b cc/cc
3 AAA_AA_ ..bb/--b ccc.-cc
>
uj5u.com熱心網友回復:
您還可以使用 cross 將函式應用于多個變數
定義要替換的特殊字符向量
remove_vec = paste(c("\\.", "/", " ", "-"), collapse = "|")
df_1 %>%
mutate(across(.cols = c(a,b,c),.fns = ~ gsub(remove_vec,"_",.)))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/326963.html
上一篇:洗掉R中的準空行
