将字符串转换为矢量

时间:2014-02-28 20:50:59

标签: string r vector

我有以下字符:

> 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

3 个答案:

答案 0 :(得分:4)

我可能实际上使用了可怕的eval(parse(...))

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

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

#  01   02 
#"AS" "BC" 

但是,为什么你有这个字符串?

答案 1 :(得分: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" 

每个步骤都非常简单 - 单独运行以查看每个步骤的作用。

答案 2 :(得分: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"