繁体   English   中英

如何在R中将几个字符转换为向量?

[英]How to convert several characters to vectors in R?

我正在努力将几个字符转换为矢量并将它们作为R中的列表。

转换规则如下:

  1. 为每个字符分配一个数字。 例如 A = 1,B = 2,C = 3,...
  2. 当字符的长度为“> = 2”时,创建一个向量。 例如 AB = c(1,2),ABC = c(1,2,3)
  3. 制作包含多个向量的列表。

例如,假设存在一个具有三个成分的ex对象。 对于每个组件,我都希望列出对象list1list2list3

ex = c("(A,B,C,D)", "(AB,BC,CD)","(AB,C)")

# 3 lists to be returned from ex object
list1 = "list(1,2,3,4)"                # from (A,B,C,D)
list2 = "list(c(1,2), c(2,3), c(3,4))" # from (AB,BC,CD)
list3 = "list(c(1,2), c(3))"           # from (AB,C)

请让我知道一个很好的R函数来解决上面的示例。 *反映了微小的变化。

lookUpTable = as.numeric(1:4)        #map numbers to their respective strings
names(lookUpTable) = LETTERS[1:4]

step1<-                              #get rid of parentheses and split by ",".
strsplit(gsub("[()]", "", ex), ",")

result<-                             #split again to make things like "AB" into "A", "B", also convert the strings to numbers acc. to lookUpTable
lapply(step1, function(x){ lapply(strsplit(x, ""), function(u) unname(lookUpTable[u])) })

# assign to the global environment.
invisible(
lapply(seq_along(result), function(x) {assign(paste0("list", x), result[[x]], envir = globalenv()); NULL})
)

# get it as strings:
invisible(
    lapply(seq_along(result), function(x) {assign(paste0("list_string", x), capture.output(dput(result[[x]])), envir = globalenv()); NULL})
)

数据:

ex = c("(A,B,C,D)", "(AB,BC,CD)","(AB,C)")

技巧和窍门:

  • 我在gsub (和strsplit )中使用了正则表达式。 学习正则表达式!

  • 我做了一个lookUpTable ,将各个字符串映射为数字。 确保您的lookUpTable设置类似。

  • 看看那种情况下的apply函数?lapply

  • 最后,我assign结果assign全球环境。 我不建议此步骤,但是它是您所要求的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM