Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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
JSON解析数据帧中的单个列_Json_R - Fatal编程技术网

JSON解析数据帧中的单个列

JSON解析数据帧中的单个列,json,r,Json,R,我处理的数据如下所示。设备列表及其JSON格式的事务记录 device_id | net_revenue_map 1984691C-1EC1-4743-8DC5-55D882388C29 | {"2016-12-11":3.66} 56132A1A-ACEF-4073-878B-98E62E84FDB5 | {"2016-12-10":3.493} 036DF381-72DE-4523-9576-D79FFDB33820 | {"2016

我处理的数据如下所示。设备列表及其JSON格式的事务记录

device_id              |                net_revenue_map 
1984691C-1EC1-4743-8DC5-55D882388C29 | {"2016-12-11":3.66}
56132A1A-ACEF-4073-878B-98E62E84FDB5 | {"2016-12-10":3.493}
036DF381-72DE-4523-9576-D79FFDB33820 | {"2016-12-10":3.493}
D622F3F8-BEC0-4B42-AE99-B10527DFA8B0 | {"2016-12-11":1.543,"2016-12-10":1.543,"2016-12-12":1.543} 
E70CA4A8-D5F5-42A1-ADC4-392A2930B779 | {"2016-12-11":3.685}
E7A508A8-3517-4F5A-9876-5B7704ABD7FD | {"2016-12-11":1.393} 
43BE8905-CDDF-440C-A705-C80C06D448E2 | {"2016-12-11":1.393} 
CCACC621-05A9-4727-B214-730B56E49FC9 | {"2016-12-12":27.728} 
我正在尝试解析JSON,以便将其转换为如下内容:

              device_id              | transaction_date | Transaction_Amt
1984691C-1EC1-4743-8DC5-55D882388C29 |   2016-12-11 | 3.66  
56132A1A-ACEF-4073-878B-98E62E84FDB5 | 2016-12-10 | 3.493 
036DF381-72DE-4523-9576-D79FFDB33820 | 2016-12-10 | 3.493 
D622F3F8-BEC0-4B42-AE99-B10527DFA8B0 | 2016-12-11 | 1.543 
D622F3F8-BEC0-4B42-AE99-B10527DFA8B0 | 2016-12-10 | 1.543 
D622F3F8-BEC0-4B42-AE99-B10527DFA8B0 | 2016-12-12 | 1.543 
E70CA4A8-D5F5-42A1-ADC4-392A2930B779 | 2016-12-11 | 3.685 
E7A508A8-3517-4F5A-9876-5B7704ABD7FD | 2016-12-11 | 1.393 
43BE8905-CDDF-440C-A705-C80C06D448E2 | 2016-12-11 | 1.393 
CCACC621-05A9-4727-B214-730B56E49FC9 | 2016-12-12 | 27.728 
在尝试以下代码时,我遇到了一个错误

library(jsonlite)
parse <- fromJSON(record_test[,2])
Error: parse error: trailing garbage
                   {"2016-12-11":3.66} {"2016-12-10":3.493} {"2016-12-
                     (right here) ------^
library(jsonlite)

解析这里有一个tidyverse方法:

library(tidyverse)

df %>% 
           # read each entry into list column
    mutate(json = map(net_revenue_map, jsonlite::fromJSON), 
           date = map(json, names),    # extract dates from list names
           date = map(date, as.Date),    # convert to proper dates
           amount = map(json, simplify)) %>%    # simplify list to values
    unnest(date, amount) %>%    # expand list columns
    select(-net_revenue_map)    # clean up

## # A tibble: 10 × 3
##                               device_id       date amount
##                                   <chr>     <date>  <dbl>
## 1  1984691C-1EC1-4743-8DC5-55D882388C29 2016-12-11  3.660
## 2  56132A1A-ACEF-4073-878B-98E62E84FDB5 2016-12-10  3.493
## 3  036DF381-72DE-4523-9576-D79FFDB33820 2016-12-10  3.493
## 4  D622F3F8-BEC0-4B42-AE99-B10527DFA8B0 2016-12-11  1.543
## 5  D622F3F8-BEC0-4B42-AE99-B10527DFA8B0 2016-12-10  1.543
## 6  D622F3F8-BEC0-4B42-AE99-B10527DFA8B0 2016-12-12  1.543
## 7  E70CA4A8-D5F5-42A1-ADC4-392A2930B779 2016-12-11  3.685
## 8  E7A508A8-3517-4F5A-9876-5B7704ABD7FD 2016-12-11  1.393
## 9  43BE8905-CDDF-440C-A705-C80C06D448E2 2016-12-11  1.393
## 10 CCACC621-05A9-4727-B214-730B56E49FC9 2016-12-12 27.728
library(jsonlite)
library(dplyr)

rowwise(df) %>% 
  do(data_frame(device_id=.$device_id,
                amount=unlist(fromJSON(.$net_revenue_map)),
                date=names(fromJSON(.$net_revenue_map))))

资料
df这里有一个tidyverse方法:

library(tidyverse)

df %>% 
           # read each entry into list column
    mutate(json = map(net_revenue_map, jsonlite::fromJSON), 
           date = map(json, names),    # extract dates from list names
           date = map(date, as.Date),    # convert to proper dates
           amount = map(json, simplify)) %>%    # simplify list to values
    unnest(date, amount) %>%    # expand list columns
    select(-net_revenue_map)    # clean up

## # A tibble: 10 × 3
##                               device_id       date amount
##                                   <chr>     <date>  <dbl>
## 1  1984691C-1EC1-4743-8DC5-55D882388C29 2016-12-11  3.660
## 2  56132A1A-ACEF-4073-878B-98E62E84FDB5 2016-12-10  3.493
## 3  036DF381-72DE-4523-9576-D79FFDB33820 2016-12-10  3.493
## 4  D622F3F8-BEC0-4B42-AE99-B10527DFA8B0 2016-12-11  1.543
## 5  D622F3F8-BEC0-4B42-AE99-B10527DFA8B0 2016-12-10  1.543
## 6  D622F3F8-BEC0-4B42-AE99-B10527DFA8B0 2016-12-12  1.543
## 7  E70CA4A8-D5F5-42A1-ADC4-392A2930B779 2016-12-11  3.685
## 8  E7A508A8-3517-4F5A-9876-5B7704ABD7FD 2016-12-11  1.393
## 9  43BE8905-CDDF-440C-A705-C80C06D448E2 2016-12-11  1.393
## 10 CCACC621-05A9-4727-B214-730B56E49FC9 2016-12-12 27.728
library(jsonlite)
library(dplyr)

rowwise(df) %>% 
  do(data_frame(device_id=.$device_id,
                amount=unlist(fromJSON(.$net_revenue_map)),
                date=names(fromJSON(.$net_revenue_map))))

资料
df交替潮汐波进近:

library(tidyverse)

df %>% 
           # read each entry into list column
    mutate(json = map(net_revenue_map, jsonlite::fromJSON), 
           date = map(json, names),    # extract dates from list names
           date = map(date, as.Date),    # convert to proper dates
           amount = map(json, simplify)) %>%    # simplify list to values
    unnest(date, amount) %>%    # expand list columns
    select(-net_revenue_map)    # clean up

## # A tibble: 10 × 3
##                               device_id       date amount
##                                   <chr>     <date>  <dbl>
## 1  1984691C-1EC1-4743-8DC5-55D882388C29 2016-12-11  3.660
## 2  56132A1A-ACEF-4073-878B-98E62E84FDB5 2016-12-10  3.493
## 3  036DF381-72DE-4523-9576-D79FFDB33820 2016-12-10  3.493
## 4  D622F3F8-BEC0-4B42-AE99-B10527DFA8B0 2016-12-11  1.543
## 5  D622F3F8-BEC0-4B42-AE99-B10527DFA8B0 2016-12-10  1.543
## 6  D622F3F8-BEC0-4B42-AE99-B10527DFA8B0 2016-12-12  1.543
## 7  E70CA4A8-D5F5-42A1-ADC4-392A2930B779 2016-12-11  3.685
## 8  E7A508A8-3517-4F5A-9876-5B7704ABD7FD 2016-12-11  1.393
## 9  43BE8905-CDDF-440C-A705-C80C06D448E2 2016-12-11  1.393
## 10 CCACC621-05A9-4727-B214-730B56E49FC9 2016-12-12 27.728
library(jsonlite)
library(dplyr)

rowwise(df) %>% 
  do(data_frame(device_id=.$device_id,
                amount=unlist(fromJSON(.$net_revenue_map)),
                date=names(fromJSON(.$net_revenue_map))))

替代tidyverse方法:

library(tidyverse)

df %>% 
           # read each entry into list column
    mutate(json = map(net_revenue_map, jsonlite::fromJSON), 
           date = map(json, names),    # extract dates from list names
           date = map(date, as.Date),    # convert to proper dates
           amount = map(json, simplify)) %>%    # simplify list to values
    unnest(date, amount) %>%    # expand list columns
    select(-net_revenue_map)    # clean up

## # A tibble: 10 × 3
##                               device_id       date amount
##                                   <chr>     <date>  <dbl>
## 1  1984691C-1EC1-4743-8DC5-55D882388C29 2016-12-11  3.660
## 2  56132A1A-ACEF-4073-878B-98E62E84FDB5 2016-12-10  3.493
## 3  036DF381-72DE-4523-9576-D79FFDB33820 2016-12-10  3.493
## 4  D622F3F8-BEC0-4B42-AE99-B10527DFA8B0 2016-12-11  1.543
## 5  D622F3F8-BEC0-4B42-AE99-B10527DFA8B0 2016-12-10  1.543
## 6  D622F3F8-BEC0-4B42-AE99-B10527DFA8B0 2016-12-12  1.543
## 7  E70CA4A8-D5F5-42A1-ADC4-392A2930B779 2016-12-11  3.685
## 8  E7A508A8-3517-4F5A-9876-5B7704ABD7FD 2016-12-11  1.393
## 9  43BE8905-CDDF-440C-A705-C80C06D448E2 2016-12-11  1.393
## 10 CCACC621-05A9-4727-B214-730B56E49FC9 2016-12-12 27.728
library(jsonlite)
library(dplyr)

rowwise(df) %>% 
  do(data_frame(device_id=.$device_id,
                amount=unlist(fromJSON(.$net_revenue_map)),
                date=names(fromJSON(.$net_revenue_map))))

谢谢你的快速回复。我对R还是个新手,所以这个方法给了我很多好的函数来研究。你能解释一下地图的功能吗?这是否只是执行date=names(json)、date=as.date(date)等操作的另一种方式?它是一个版本的
lappy
,允许您迭代列表列并应用函数。按行分组在某种程度上是一种替代。感谢您的快速响应。我对R还是个新手,所以这个方法给了我很多好的函数来研究。你能解释一下地图的功能吗?这是否只是执行date=names(json)、date=as.date(date)等操作的另一种方式?它是一个版本的
lappy
,允许您迭代列表列并应用函数。按行分组在某种程度上是一种替代。如果您的数据存储为JSON,则使用
jsonlite::stream_in(file(“/your_file…”)将其读入R可能更容易。
如果您的数据存储为JSON,则使用
jsonlite::stream_in(file(“/your_file…”)将其读入R可能更容易。