Добавить столбец имени файла в фрейм данных из нескольких json импорта - PullRequest
0 голосов
/ 16 июня 2020

У меня есть несколько .json файлов, состоящих из дат. Я хотел бы импортировать все файлы .json в R, чтобы создать один фрейм данных и добавить столбец, состоящий из имен файлов.

2020-06-15.json:

[{"title":"Moral Machine","title_link":"http://moralmachine.mit.edu/"}]

2020-06-16.json:

[{"title":"De Monitor","title_link":"http://demonitor.ncrv.nl/"}]

Затем я создаю фрейм данных

test_path <- "data"
test_files <- list.files(test_path, pattern = "*.json")

test_files %>%
  map_df(~fromJSON(file.path(test_path, .), flatten = TRUE))

Желаемый результат:

          title                   title_link       file_name
1 Moral Machine http://moralmachine.mit.edu/ 2020-06-15.json
2    De Monitor    http://demonitor.ncrv.nl/ 2020-06-16.json

Ответы [ 2 ]

0 голосов
/ 16 июня 2020
library(jsonlite)

test_files_full <- list.files(test_path, pattern = "*.json",full.names=TRUE) # to get the full path string

test_files <- list.files(test_path, pattern = "*.json")

t(sapply(seq_along(test_files), function(x) 
            c(fromJSON(test_files_full[x]),file_name=test_files[x])))

дает,

     title           title_link                     file_name        
[1,] "Moral Machine" "http://moralmachine.mit.edu/" "2020-06-15.json"
[2,] "De Monitor"    "http://demonitor.ncrv.nl/"    "2020-06-16.json"
0 голосов
/ 16 июня 2020

Использование rbindlist из data.table:

library(data.table)

file_names <- list.files(path = test_path, pattern = '.*json')

data_list <- lapply(file_names, function(z){
  dat <- myFunction(z) #your function to read and clean json files
  dat$file_name <- z
  return(dat)
})

combined_data <- rbindlist(l = data_list, use.names = T, fill = T)

Поскольку я не знаю структуру вашего файла JSON, я предполагаю, что у вас есть функция с именем myFunction для чтения и очистите данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...