#r #json
#r #json
Вопрос:
У меня есть фрейм данных со столбцом, имеющим массив JSON в строковой форме. Моя цель — проанализировать столбец и преобразовать в однократную кодировку, но я столкнулся с ошибкой при разборе JSON.
library(jsonlite)
> df <- data_frame(Amenities=c("["Parking", "Lawn", "Garage", "Frontyard"]", "["Parking", "Lawn", "Garage", "Backyard"]", "["Parking", "Lawn", "Garage"]"))
> df
# A tibble: 3 x 1
Amenities
<chr>
1 "["Parking", "Lawn", "Garage", "Frontyard"]"
2 "["Parking", "Lawn", "Garage", "Backyard"]"
3 "["Parking", "Lawn", "Garage"]"
> df <- df %>% mutate(Amenities=fromJSON(Amenities))
Error: parse error: trailing garbage
awn", "Garage", "Frontyard"] ["Parking", "Lawn", "Garage", "
(right here) ------^
>
Ожидаемый результат:
Parking Lawn Garage Frontyard Backyard
1 1 1 1 0
1 1 1 0 1
1 1 1 0 0
Решение:
Сохранение существующего фрейма данных, а также.
library(qdapTools)
df <- cbind(df, (mtabulate(str_extract_all(df$amenities, "\w ( \w )*"))))
Ответ №1:
Мы можем сделать это в одной строке с помощью mtabulate
library(qdapTools)
library(stringr)
mtabulate(str_extract_all(df$Amenities, "\w "))
-вывод
# Backyard Frontyard Garage Lawn Parking
#1 0 1 1 1 1
#2 1 0 1 1 1
#3 0 0 1 1 1
Ответ №2:
Вы можете обрабатывать json как строки, очищать их и расширять набор данных.
library(dplyr)
df %>%
mutate(Amenities = gsub('\[|\]|"', '', Amenities)) %>%
splitstackshape::cSplit_e("Amenities", sep = ',\s*',
type = 'character', fill = 0, fixed = FALSE) %>%
rename_with(~sub('Amenities_', '', .))
# Amenities Backyard Frontyard Garage Lawn Parking
#1 Parking, Lawn, Garage, Frontyard 0 1 1 1 1
#2 Parking, Lawn, Garage, Backyard 1 0 1 1 1
#3 Parking, Lawn, Garage 0 0 1 1 1
Комментарии:
1. Решение слишком сложное для меня. Есть ли другое более простое решение?
2. Вы можете проверить другое решение, если это кажется проще.