簡體   English   中英

在 dplyr 的重命名函數中輸入新列名作為字符串

[英]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 的值用作列表中的名稱。

最近對tidyrdplyr更新允許您使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM