R将字符串<list>转换为List

时间:2017-04-17 22:03:47

标签: r string list file-read

我正在从文件导入列。该列使用collect_list函数形成。所以每个条目如下所示:

[1,5,10]
[27,30,1,33,40]
[1,2,8,20,30,50,...]

我正在尝试将此列读入R并将每行转换为列表。当我读到时,我会在表格的每一行都得到一个字符串:

"[1,5,10]"

如何将此列读入列表?谢谢!

3 个答案:

答案 0 :(得分:4)

有效地传输JSON,可以这样导入:

text <- '[1,5,10]
[27,30,1,33,40]
[1,2,8,20,30,50]'

l <- jsonlite::stream_in(textConnection(text), simplifyDataFrame = FALSE)

str(l)
#> List of 3
#>  $ : int [1:3] 1 5 10
#>  $ : int [1:5] 27 30 1 33 40
#>  $ : int [1:6] 1 2 8 20 30 50

答案 1 :(得分:0)

您想使用str_split包中的stringr。如果df是您的数据框,data是变量名称:

library("stringr")
df$data = gsub(pattern = "(\\[|\\])", replacement = "", x = df$x)
list = str_split(string = df$data, pattern = ",")

答案 2 :(得分:0)

不确定您的确切想法,但是如果您将数据导入到 data.frame并希望有一个包含列表值的列,您可以使用strsplit

dd = structure(list(x = c("[1,5,10]", "[27,30,1,33,40]", "[1,2,8,20,30,50]")), .Names = c("x"), class = "data.frame", row.names = 1:3)

dd$y = strsplit(gsub('\\[|\\]', '', dd$x), ",")

如果您希望dd$y包含数字数据,您也可以使用:

dd$y = lapply(strsplit(gsub('\\[|\\]', '', dd$x), ","), as.numeric)

输出:

> str(dd)
'data.frame':   3 obs. of  2 variables:
 $ x: chr  "[1,5,10]" "[27,30,1,33,40]" "[1,2,8,20,30,50]"
 $ y:List of 3
  ..$ : num  1 5 10
  ..$ : num  27 30 1 33 40
  ..$ : num  1 2 8 20 30 50