我有以下字符:
> 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 :(得分: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"