Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中向列名追加或粘贴名称_R_Append_Paste_Columnname - Fatal编程技术网

在R中向列名追加或粘贴名称

在R中向列名追加或粘贴名称,r,append,paste,columnname,R,Append,Paste,Columnname,我有一个包含400列的tab delim文件。现在我想在列名中添加文本。即,如果有列名a和B,我想将a更改为a.ovca,B更改为B.ctrls。像wise一样,我想添加文本(ovca和ctrls)到400个coulmns。有些列名带有ovca,有些列名带有CTRL。所有列都是唯一的,包含1000多行。delim文件的示例代码如下所示: X Y Z A B C

我有一个包含400列的tab delim文件。现在我想在列名中添加文本。即,如果有列名a和B,我想将a更改为a.ovca,B更改为B.ctrls。像wise一样,我想添加文本(ovca和ctrls)到400个coulmns。有些列名带有ovca,有些列名带有CTRL。所有列都是唯一的,包含1000多行。delim文件的示例代码如下所示:

         X             Y         Z               A       B               C  
        2.34          .89       1.4             .92     9.40            .82
        6.45          .04       2.55            .14     1.55            .04
        1.09          .91       4.19            .16     3.19            .56
        5.87          .70       3.47            .80     2.47            .90
我希望文件看起来像:

       X.ovca     Y.ctrls      Z.ctrls       A.ovca     B.ctlrs       C.ovca  
        2.34          .89       1.4             .92     9.40            .82
        6.45          .04       2.55            .14     1.55            .04
        1.09          .91       4.19            .16     3.19            .56
        5.87          .70       3.47            .80     2.47            .90
请帮帮我

问候
Thileepan

如果调用data.frame
dat
,则可以使用
colnames(dat)
访问(并写入)列名

因此:

cn <- colnames(dat)
cn <- sub("([AXC])","\\1.ovca",cn)
cn <- sub("([YZB])","\\1.ctrls",cn)
colnames(dat) <- cn

> cn
[1] "X.ovca"  "Y.ctrls" "Z.ctrls" "A.ovca"  "B.ctrls" "C.ovca" 

cn这个怎么样?基本上,您可以使用%
中的
%找到要附加“ovca”和“ctrls”的列,并附加相应的标记

> (mydf <- data.frame(X = runif(10), Y = runif(10), Z = runif(10), A = runif(10), B = runif(10), C = runif(10)))
            X         Y         Z         A         B         C
1  0.81030594 0.1624974 0.3977381 0.9619541 0.9866498 0.4424760
2  0.92498687 0.2069429 0.6065115 0.9969835 0.2407364 0.2455184
3  0.11033869 0.2878640 0.5662793 0.7936232 0.6066735 0.8210634

> names(mydf)[names(mydf) %in% c("X", "A", "C")] <- paste(names(mydf)[names(mydf) %in% c("X", "A", "C")], "ovca", sep = ".")
> names(mydf)[names(mydf) %in% c("Y", "Z", "B")] <- paste(names(mydf)[names(mydf) %in% c("Y", "Z", "B")], "ctrls", sep = ".")
> mydf
       X.ovca   Y.ctrls   Z.ctrls    A.ovca   B.ctrls    C.ovca
1  0.81030594 0.1624974 0.3977381 0.9619541 0.9866498 0.4424760
2  0.92498687 0.2069429 0.6065115 0.9969835 0.2407364 0.2455184
3  0.11033869 0.2878640 0.5662793 0.7936232 0.6066735 0.8210634
>(mydf名称(mydf)[名称(mydf)%in%c(“X”、“A”、“c”)]名称(mydf)[名称(mydf)%in%c(“Y”、“Z”、“B”)]mydf
X.ovca Y.ctrls Z.ctrls A.ovca B.ctrls C.ovca
1  0.81030594 0.1624974 0.3977381 0.9619541 0.9866498 0.4424760
2  0.92498687 0.2069429 0.6065115 0.9969835 0.2407364 0.2455184
3  0.11033869 0.2878640 0.5662793 0.7936232 0.6066735 0.8210634

这是一个使用
stringr
包的两行程序

nam <- names(mydf)
names(mydf) <- ifelse(nam %in% c('X', 'A', 'Z'), 
   str_c(nam, '.ovca'),  str_c(nam, '.ctrls'))

nam或,在一行中:
colnames(dat)@JoshuaUlrich同意,但问题有多个模式/替换对需要操作。@JoshuaUlrich编辑以使其更清楚。理想情况下,这将通过一个基于一组模式/替换对应用替换的函数来完成,但我怀疑这对于这些目的来说是过分的。