[英]How to glue a function argument to .names in dplyr's across function?
[英]Setting names intuitively with dplyr across() function
我想操作幾個列來創建新列,其名稱是正在操作的列名稱的變體。
dplyr 1.0.0 的 cross() function 似乎是這項工作的工具,但 .names 參數似乎功能有限。 這是我想要做的:
tmp <- iris %>%
mutate(across(starts_with('Sepal'),
~ .x - Petal.Length,
.names = gsub('Sepal', '', "{col}")))
但 gsub function 不起作用。 我可以通過以下方式解決這個問題:
tmp <- iris %>%
mutate(across(starts_with('Sepal'),
~ .x - Petal.Length,
.names = "mod_{col}"))
names(tmp) <- gsub("mod_Sepal", "mod_", names(tmp))
但這需要更多代碼並且更難跟蹤。 我在這里遺漏了什么嗎?有沒有更簡單的方法來設置新的列名?
我們可以在mutate
步驟之后使用rename_at
library(dplyr)
library(stringr)
iris %>%
mutate(across(starts_with('Sepal'),
~ .x - Petal.Length)) %>%
rename_at(vars(starts_with("Sepal")), ~ str_remove(., "Sepal"))
根據?across
.names - 對於單個 function 案例,默認 (NULL) 等效於“{col}”
並且沒有刪除已經存在的列名的選項,但是,我們可以添加后綴或前綴
您可以將 function 傳遞給.names
作為 -
library(dplyr)
iris %>%
mutate(across(starts_with('Sepal'), ~ .x - Petal.Length,
.names = "{gsub('Sepal.', '', {col}, fixed = TRUE)}"))
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species Length Width
#1 5.1 3.5 1.4 0.2 setosa 3.7 2.1
#2 4.9 3.0 1.4 0.2 setosa 3.5 1.6
#3 4.7 3.2 1.3 0.2 setosa 3.4 1.9
#4 4.6 3.1 1.5 0.2 setosa 3.1 1.6
#5 5.0 3.6 1.4 0.2 setosa 3.6 2.2
#6 5.4 3.9 1.7 0.4 setosa 3.7 2.2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.