我有这个数据框
dat <- read.table(text =
" 'A;B;T' 'C;D' E X
101 2.1 0.9 1
102 1.1 0.8 2
103 2 1.5 2
104 2 1.5 0.5
105 1.1 0.8 2
106 1.1 0.8 2
106 1.1 0.8 2 ",
header=TRUE, check.names =FALSE)
在示例;
中,某些列的多个名称由'A;B;T' 'C;D'
分隔。
我想使用一个引用向量,它将同时分配和选择列和最终名称"A" and "D"
。我还想在我的最终数据框中保留具有正确单个名称的列。
给定一个向量v1<-c("A", "D")
来选择和匹配colnames
我想退回
A D E X
101 2.1 0.9 1.0
102 1.1 0.8 2.0
103 2.0 1.5 2.0
104 2.0 1.5 0.5
105 1.1 0.8 2.0
106 1.1 0.8 2.0
106 1.1 0.8 2.0
答案 0 :(得分:1)
我们可以使用str_extract
从'dat'的names
中提取子字符串,然后为names
分配新提取的vector
library(stringr)
v1 <- str_extract(names(dat), paste(v1, collapse="|"))
i1 <- !is.na(v1)
names(dat)[i1] <- v1[i1]
dat
# A D E X
#1 101 2.1 0.9 1.0
#2 102 1.1 0.8 2.0
#3 103 2.0 1.5 2.0
#4 104 2.0 1.5 0.5
#5 105 1.1 0.8 2.0
#6 106 1.1 0.8 2.0
#7 106 1.1 0.8 2.0