Как прочитать список списка в r

#r #txt

#r #txt

Вопрос:

У меня есть текстовый файл, подобный этому: [[«seller_id»,»product_id»,»buyer_id»,»sale_date»,»quantity»,»price»],[7,11,49,»2019-01-21″,5,3330],[13,32,6,»2019-02-10″,9,1089],[50,47,4,»2019-01-06″,1,1343],[1,22,2,»2019-03-03″,9,7677]]

Я хотел бы прочитать его по R в виде таблицы, подобной этой:

seller_id product_id buyer_id дата продажи Количество Цена
7 11 49 2019-01-21 5 3330
13 32 6 2019-02-10 9 1089
50 47 4 2019-01-06 1 1343
1 22 2 2019-03-03 9 7677

Как написать правильный R-код? Большое спасибо за ваше время.

Ответ №1:

Более простой вариант fromJSON

 library(jsonlite)
library(janitor)
fromJSON(txt = "file1.txt") %>% 
    as_tibble %>% 
    row_to_names(row_number = 1) %>%
    type.convert(as.is = TRUE)
 

-вывод

 # A tibble: 4 x 6
#  seller_id product_id buyer_id sale_date  quantity price
#      <int>      <int>    <int> <chr>         <int> <int>
#1         7         11       49 2019-01-21        5  3330
#2        13         32        6 2019-02-10        9  1089
#3        50         47        4 2019-01-06        1  1343
#4         1         22        2 2019-03-03        9  7677
 

Ответ №2:

Вам нужно будет проанализировать json из массивов во фрейм данных. Возможно, что-то вроде этого:

 # Get string
str <- '[["seller_id","product_id","buyer_id","sale_date","quantity","price"],[7,11,49,"2019-01-21",5,3330],[13,32,6,"2019-02-10",9,1089],[50,47,4,"2019-01-06",1,1343],[1,22,2,"2019-03-03",9,7677]]'
 
 df_list <- jsonlite::parse_json(str)
do.call(rbind, lapply(df_list[-1], function(x) {
  setNames(as.data.frame(x), unlist(df_list[1]))}))
#>   seller_id product_id buyer_id  sale_date quantity price
#> 1         7         11       49 2019-01-21        5  3330
#> 2        13         32        6 2019-02-10        9  1089
#> 3        50         47        4 2019-01-06        1  1343
#> 4         1         22        2 2019-03-03        9  7677
 

Создано 2020-12-11 пакетом reprex (версия 0.3.0)

Ответ №3:

Некоторые базовые параметры R с использованием:


  • gsub read.table
 read.table(
  text = gsub('"|\[|\]', "", gsub("\],", "n", s)),
  sep = ",",
  header = TRUE
)
 

  • gsub read.csv
 read.csv(text = gsub('"|\[|\]', "", gsub("\],", "n", s)))
 

что дает

   seller_id product_id buyer_id  sale_date quantity price
1         7         11       49 2019-01-21        5  3330
2        13         32        6 2019-02-10        9  1089
3        50         47        4 2019-01-06        1  1343
4         1         22        2 2019-03-03        9  7677
 

Данные

 s <- '[["seller_id","product_id","buyer_id","sale_date","quantity","price"],[7,11,49,"2019-01-21",5,3330],[13,32,6,"2019-02-10",9,1089],[50,47,4,"2019-01-06",1,1343],[1,22,2,"2019-03-03",9,7677]]'