2014-02-28 114 views
1

我有以下文字:字符串轉換爲矢量

> a 
[1] "01'='AS','02'='BC','03'='BS','04'='CC','05'='CS','06'='CH','07'='CL','08'='CM','09'='DF','10'='DG','11'='GT','12'='GR','13'='HG','14'='JC','15'='MC','16'='MN','17'='MS','18'='NT','19'='NL','20'='OC','21'='PL','22'='QT','23'='QR','24'='SP','25'='SL','26'='SR','27'='TC','28'='TL','29'='TS','30'='VZ','31'='YN','32'='ZS" 

我希望轉換成一個向量像這樣的:

>translate<-c('01'='AS','02'='BC','03'='BS','04'='CC','05'='CS','06'='CH','07'='CL','08'='CM','09'='DF','10'='DG','11'='GT','12'='GR','13'='HG','14'='JC','15'='MC','16'='MN','17'='MS','18'='NT','19'='NL','20'='OC','21'='PL','22'='QT','23'='QR','24'='SP','25'='SL','26'='SR','27'='TC','28'='TL','29'='TS','30'='VZ','31'='YN','32'='ZS') 

於是我會有這樣的結果:

> translate 

> 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 
"AS" "BC" "BS" "CC" "CS" "CH" "CL" "CM" "DF" "DG" "GT" "GR" "HG" "JC" "MC" "MN" "MS" "NT" "NL" "OC" "PL" "QT" "QR" "SP" 
    25 26 27 28 29 30 31 32 
"SL" "SR" "TC" "TL" "TS" "VZ" "YN" "ZS" 

現在我唯一的方法來解決這個問題是通過使用複製粘貼在「a」的輸出並寫入c('copy -paste a')。我希望以一般方式做到這一點。我使用的Windows 7操作系統和Rstudio 3.0.2

+0

你是如何創建'了'?這就是你應該改變的。 – Roland

回答

4

我實際上可能會使用可怕的eval(parse(...))此:

a <- "01'='AS','02'='BC" 

translate <- eval(parse(text=paste0("c('", a, "')"))) 

# 01 02 
#"AS" "BC" 

但是,爲什麼你有這樣的字符串?

1
a = "01'='AS','02'='BC','03'='BS','04'='CC','05'='CS','06'='CH','07'='CL','08'='CM','09'='DF','10'='DG','11'='GT','12'='GR','13'='HG','14'='JC','15'='MC','16'='MN','17'='MS','18'='NT','19'='NL','20'='OC','21'='PL','22'='QT','23'='QR','24'='SP','25'='SL','26'='SR','27'='TC','28'='TL','29'='TS','30'='VZ','31'='YN','32'='ZS" 

tmp = strsplit(a, split = "','|'='")[[1]] 

translate = tmp[seq(2, length(tmp), 2)] 
names(translate) = tmp[seq(1, length(tmp), 2)] 
translate 
# 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 #19 20 21 22 
#"AS" "BC" "BS" "CC" "CS" "CH" "CL" "CM" "DF" "DG" "GT" "GR" "HG" "JC" "MC" "MN" "MS" "NT" #"NL" "OC" "PL" "QT" 
# 23 24 25 26 27 28 29 30 31 32 
#"QR" "SP" "SL" "SR" "TC" "TL" "TS" "VZ" "YN" "ZS" 

每個單獨的步驟都非常簡單 - 分別運行,看看每個人都做了什麼。

1

下面是一個簡短的方法:

s <- regmatches(a, gregexpr("\\w+", a))[[1]] 
translate <- setNames(s[c(FALSE, TRUE)], s[c(TRUE, FALSE)]) 

結果:

01 02 03 04 05 06 07 08 09 10 11 12 13 14 
"AS" "BC" "BS" "CC" "CS" "CH" "CL" "CM" "DF" "DG" "GT" "GR" "HG" "JC" 
    15 16 17 18 19 20 21 22 23 24 25 26 27 28 
"MC" "MN" "MS" "NT" "NL" "OC" "PL" "QT" "QR" "SP" "SL" "SR" "TC" "TL" 
    29 30 31 32 
"TS" "VZ" "YN" "ZS"