2017-07-04 65 views
0

我有這樣的數據幀返回基於一個完整的數據幀偏colnames

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

您應該更好地解釋邏輯。爲什麼當你說你想根據'v1'選擇和匹配時,E和X列也會被選中?那些列名稱是單個字符還是可以是更長的名稱,所以我們必須用';'分割? –

+0

這個問題現在能夠更好地解釋並且有足夠的細節嗎? – Al14

回答

1

我們可以使用str_extract從的「逸」的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