在 R 中的 rename() 函数内部使用外部变量

Sam*_*am 4 r

我是新手R并且有一个问题

我正在尝试重新格式化一些数据,在此过程中我想重命名新数据集的列。

这是我尝试执行此操作的方法:

首先.csv读入文件,case1_case2.csv 然后文件名.csv被分成两部分,每一部分分配给一个向量,所以它最终是这样的:

xName=case1
yName=case2
Run Code Online (Sandbox Code Playgroud)

将数据放入新列后,我想将每列重命名为 case1 和 case2

为此,我尝试使用Rbut 中的重命名函数,而不是重命名为case1,并且case2列被重命名为xNameyName

这是我的代码:

  for ( n in 1:length(dirNames) ){
      inFile <- read.csv(dirNames[n], header=TRUE, fileEncoding="UTF-8-BOM")
      xName <- sub("_.*","",dirNames[n])
      yName <- sub(".*[_]([^.]+)[.].*", "\\1", dirNames[n])
      xValues <- inFile %>% select(which(str_detect(names(inFile), xName))) %>% stack() %>% rename( xName = values ) %>% subset( select = xName)
      yValues <- inFile %>% select(which(!str_detect(names(inFile), xName))) %>% stack() %>% rename(yName = values, Organisms=ind)
      finalForm <- cbind(xValues, yValues) %>% filter(complete.cases(.))

}
Run Code Online (Sandbox Code Playgroud)

如何确保变量xName和在函数yName内部展开rename()

谢谢。

ngm*_*ngm 5

您没有提供可重现的示例,所以我只是一般性地演示这个想法。该rename函数是dplyr包的一部分。

您需要“取消引用”包含要用作新列名称的字符串的变量。取消引用运算符是!!,您需要使用特殊的:=赋值运算符来允许在左侧取消引用。

library(tidyverse)
df <- data_frame(x = 1:3)
y <- "Foo"

df %>% rename(y=x)      # Not what you want - need to unquote y
df %>% rename(!!y = x)  # Gives error - need to use :=
df %>% rename(!!y := x) # Correct
Run Code Online (Sandbox Code Playgroud)