在R中向列名追加或粘贴名称
我有一个包含400列的tab delim文件。现在我想在列名中添加文本。即,如果有列名a和B,我想将a更改为a.ovca,B更改为B.ctrls。像wise一样,我想添加文本(ovca和ctrls)到400个coulmns。有些列名带有ovca,有些列名带有CTRL。所有列都是唯一的,包含1000多行。delim文件的示例代码如下所示:在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
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编辑以使其更清楚。理想情况下,这将通过一个基于一组模式/替换对应用替换的函数来完成,但我怀疑这对于这些目的来说是过分的。