繁体   English   中英

如何将 char(例如,“[1, 2, 3]”)转换为列表(例如,[1, 2, 3])

[英]How to convert char (e.g., "[1, 2, 3]" ) to a list (e.g., [1, 2, 3])

有没有一种很好的方法可以将 dataframe 中的一列字符转换为 R Studio 中的列表?

例如

转换类型 chr

"[1, 2, 3]"
"[11, 24, 3]"
"[1, 21, 3]"
"[14, 2, 31]"

列出

[1, 2, 3]
[11, 24, 3]
[1, 21, 3]
[14, 2, 31]

这些不是 R 中的列表; 它们看起来像 python(语言)和 json(结构)中的列表。 我们可以利用后者:

vec <- c("[1, 2, 3]", "[11, 24, 3]", "[1, 21, 3]", "[14, 2, 31]")
jsonlite::stream_in(textConnection(paste(vec, collapse = "\n")), 
                    simplifyDataFrame = FALSE, simplifyMatrix = FALSE)
#  Imported 4 records. Simplifying...
# [[1]]
# [1] 1 2 3
# [[2]]
# [1] 11 24  3
# [[3]]
# [1]  1 21  3
# [[4]]
# [1] 14  2 31

gsub + str2lang + eval怎么样?

> s <- c("[1, 2, 3]", "[11, 24, 3]", "[1, 21, 3]", "[14, 2, 31]")

> lapply(gsub("\\[(.*)\\]", "c(\\1)", s), function(x) eval(str2lang(x)))
[[1]]
[1] 1 2 3

[[2]]
[1] 11 24  3

[[3]]
[1]  1 21  3

[[4]]
[1] 14  2 31

另一种选择是使用reticulate py_eval中的 py_eval

> library(reticulate)

> lapply(s, py_eval)
[[1]]
[1] 1 2 3

[[2]]
[1] 11 24  3

[[3]]
[1]  1 21  3

[[4]]
[1] 14  2 31

这是一种使用strsplit的方法。

strsplit(x, '\\D+') |> lapply(`[`, -1)
# [[1]]
# [1] "1" "2" "3"
# 
# [[2]]
# [1] "11" "24" "3" 
# 
# [[3]]
# [1] "1"  "21" "3" 
# 
# [[4]]
# [1] "14" "2"  "31"

数据:

x <- c("[1, 2, 3]", "[11, 24, 3]", "[1, 21, 3]", "[14, 2, 31]")

暂无
暂无

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

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