![](/img/trans.png)
[英]How to rename selected columns using dplyr with new column names as strings
[英]Enter new column names as string in dplyr's rename function
dplyr 的重命名函數要求將新列名作為不帶引號的變量名傳入。 但是我有一個函數,其中列名是通過將字符串粘貼到傳入的參數上來構造的,字符串也是如此。
例如說我有這個功能
myFunc <- function(df, col){
new <- paste0(col, '_1')
out <- dplyr::rename(df, new = old)
return(out)
}
如果我運行這個
df <- data.frame(a = 1:3, old = 4:6)
myFunc(df, 'x')
我得到
a new
1 1 4
2 2 5
3 3 6
而我希望“新”列是我構造的字符串的名稱(“x_1”),即
a x_1
1 1 4
2 2 5
3 3 6
反正有這樣做嗎?
我想這就是你要找的。 正如@Henrik 建議的那樣使用rename_
,但該參數有一個有趣的名稱:
> myFunc <- function(df, col){
+ new <- paste0(col, '_1')
+ out <- dplyr::rename_(df, .dots=setNames(list(col), new))
+ return(out)
+ }
> myFunc(data.frame(x=c(1,2,3)), "x")
x_1
1 1
2 2
3 3
>
請注意使用setNames
將 new 的值用作列表中的名稱。
最近對tidyr
和dplyr
更新允許您使用rename_with
函數。
假設您有一個數據框:
library(tidyverse)
df <- tibble(V0 = runif(10), V1 = runif(10), V2 = runif(10), key=letters[1:10])
並且您想更改所有“V”列。 通常,我對此類列的引用來自一個 json 文件,在 R 中它是一個帶標簽的列表。 例如,
colmapping <- c("newcol1", "newcol2", "newcol3")
names(colmapping) <- paste0("V",0:2)
然后,您可以使用以下命令將df
的名稱更改為colmapping
列表中的字符串:
df <- rename_with(.data = df, .cols = starts_with("V"), .fn = function(x){colmapping[x]})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.