R 如何在执行函数时一步更改列名?
我有一个名为R 如何在执行函数时一步更改列名?,r,R,我有一个名为newBamAD的函数,当我对输入数据帧mydf运行该函数时,该函数会给出以下输出(见下文)。我想通过将列名bam.AD更改为新列名来存储newBamAD(mydf)的结果。例如,我想在同一步骤中将列名bam.AD更改为新名称,当我使用我的dataframe运行函数时,如下所示,output是否有矩阵或data.frame很重要。矩阵使用dimnames属性存储行名和列名,而data.frames使用names和row.names属性分别存储列名和行名 从您的问题来看,似乎在输出中有
newBamAD
的函数,当我对输入数据帧mydf
运行该函数时,该函数会给出以下输出
(见下文)。我想通过将列名bam.AD更改为新列名来存储newBamAD(mydf)
的结果。例如,我想在同一步骤中将列名bam.AD
更改为新名称,当我使用我的dataframe运行函数时,如下所示,output是否有矩阵或data.frame很重要。矩阵使用dimnames
属性存储行名和列名,而data.frames使用names
和row.names
属性分别存储列名和行名
从您的问题来看,似乎在输出中有一个矩阵,因为data.frames在打印时通常不引用字符元素(不管它们实际上是因子还是真正的字符向量),而矩阵会引用
因此,要更改列名,必须使用函数。(您也可以使用该函数,但这需要一个包含两个组件的列表RHS,一个用于行名称,另一个用于列名,因为您不想弄乱行名称,所以这没有帮助。)
如果要在函数调用的同一行中执行此操作,则必须调用colnames?names
,?setNames
,帮助(“名称”)
output
start REF ALT bam.AD
1 "chr20:5363934" "C" "T" "59,29"
2 "chr5:8529759" "G" "C" "28,41"
3 "chr14:9620689" "T" "G" "49,41"
output
start REF ALT newname.AD
1 "chr20:5363934" "C" "T" "59,29"
2 "chr5:8529759" "G" "C" "28,41"
3 "chr14:9620689" "T" "G" "49,41"
mydf <- data.frame(); ## dummy
newBamAD <- function(mydf) matrix(c('chr20:5363934','chr5:8529759','chr14:9620689','C','G','T','T','C','G','59,29','28,41','49,41'),3,dimnames=list(1:3,c('start','REF','ALT','bam.AD')));
newBamAD(mydf);
## start REF ALT bam.AD
## 1 "chr20:5363934" "C" "T" "59,29"
## 2 "chr5:8529759" "G" "C" "28,41"
## 3 "chr14:9620689" "T" "G" "49,41"
`colnames<-`(newBamAD(mydf),c('start','REF','ALT','newname.AD'));
## start REF ALT newname.AD
## 1 "chr20:5363934" "C" "T" "59,29"
## 2 "chr5:8529759" "G" "C" "28,41"
## 3 "chr14:9620689" "T" "G" "49,41"
output <- newBamAD(mydf); colnames(output)[colnames(output)=='bam.AD'] <- 'newname.AD';
output;
## start REF ALT newname.AD
## 1 "chr20:5363934" "C" "T" "59,29"
## 2 "chr5:8529759" "G" "C" "28,41"
## 3 "chr14:9620689" "T" "G" "49,41"
transform(newBamAD(mydf),newname.AD=bam.AD,bam.AD=NULL);
## start REF ALT newname.AD
## 1 chr20:5363934 C T 59,29
## 2 chr5:8529759 G C 28,41
## 3 chr14:9620689 T G 49,41