Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将CSV文件字段中嵌入的JSON转换为数据帧_Json_R - Fatal编程技术网

将CSV文件字段中嵌入的JSON转换为数据帧

将CSV文件字段中嵌入的JSON转换为数据帧,json,r,Json,R,我是R的新手。我做了一些搜索,但在这个问题上仍然有问题 这是100000条记录中我的数据(CSV)的一个示例 {id_outlet_delivery:22015,name:Branch A}6 , {id_outlet_delivery:22016,name:Branch B}7 , {id_outlet_delivery:22017,name:Branch C}8 我想要的是将其转换为数据帧,以便执行一些分析。 (我不希望示例中的数字6、7、8出现在数据帧中)。这里有一个使用regex的

我是R的新手。我做了一些搜索,但在这个问题上仍然有问题

这是100000条记录中我的数据(CSV)的一个示例

{id_outlet_delivery:22015,name:Branch A}6 ,

{id_outlet_delivery:22016,name:Branch B}7 ,

{id_outlet_delivery:22017,name:Branch C}8
我想要的是将其转换为数据帧,以便执行一些分析。
(我不希望示例中的数字6、7、8出现在数据帧中)。

这里有一个使用
regex的方法

 library(stringr)
  v1 <- '{id_outlet_delivery:22015,name:Branch A}6 ,
    {id_outlet_delivery:22016,name:Branch B}7 ,
    {id_outlet_delivery:22017,name:Branch C}8'

  nm1 <- str_extract_all(v1, perl("[[:alpha:]_]+(?=:)"))[[1]][1:2]
  val <- str_extract_all(v1, perl("(?<=:)[[:alnum:] ]+(?=\\})?"))[[1]]

我想这可以通过使用
RJSONIO
jsonlite
等包来实现。R中三个最流行的JSON驱动程序(包)中的任何一个都可以将JSON字符串转换为R对象。这不是一个合适的CSV文件,因为其中没有引用JSON字符串(而且,我想不出一个CSV文件库在默认情况下会读取它)。最好的方法是使用
readLines
,或者将整个内容转换为正确的JSON字符串/格式,或者单独解析每一行,并将所有内容合并到数据帧行中。
  library(stringi)
  nm1 <- stri_extract_all_regex(v1, "[[:alpha:]_]+(?=:)")[[1]][1:2]
  val <- stri_extract_all_regex(v1, "(?<=:)[[:alnum:] ]+(?=\\}|,)")[[1]]


  indx <- c(TRUE, FALSE)
  dat <- setNames(data.frame(as.numeric(val[indx]), val[!indx],
                                     stringsAsFactors=FALSE), nm1)

  dat
  #  id_outlet_delivery     name
  #1              22015 Branch A
  #2              22016 Branch B
  #3              22017 Branch C