我是新手R并且有一个问题
我正在尝试重新格式化一些数据,在此过程中我想重命名新数据集的列。
这是我尝试执行此操作的方法:
首先.csv读入文件,case1_case2.csv
然后文件名.csv被分成两部分,每一部分分配给一个向量,所以它最终是这样的:
xName=case1
yName=case2
Run Code Online (Sandbox Code Playgroud)
将数据放入新列后,我想将每列重命名为 case1 和 case2
为此,我尝试使用Rbut 中的重命名函数,而不是重命名为case1,并且case2列被重命名为xName和yName。
这是我的代码:
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()
谢谢。
您没有提供可重现的示例,所以我只是一般性地演示这个想法。该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)