根据部分名称返回完整的数据帧

时间:2017-07-04 10:12:00

标签: r dataframe

我有这个数据框

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

1 个答案:

答案 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