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

时间:2018-01-30 16:11:34

标签: r

我是R的新手并遇到问题

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

这是我试图这样做的方式:

首先读入.csv文件,让我们说case1_case2.csv 然后.csv文件的名称分为两部分 每个部分都分配给一个向量 所以它最终会像这样:

xName=case1
yName=case2

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

要执行此操作,我尝试使用R中的重命名功能,但不是重命名为case1case2,而是将列重命名为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(.))

}

如何确保变量xNameyNamerename()函数内展开

感谢。

1 个答案:

答案 0 :(得分:2)

您没有提供可重复的示例,因此我只是展示了这个想法。 rename函数是dplyr包的一部分。

你需要&#34;取消引用&#34;包含要用作新列名的字符串的变量。非引号运算符为!!,您需要使用特殊的:=赋值运算符来允许左侧的不引号。

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