2016-10-17 4 views
0

Я пытаюсь извлечь соответствующую часть JSON из данных столбца в новый столбец «geo». Этот код только извлекает первую строку правильно, а затем повторяет сам. Я ожидаю, что столбец 'гео' читать:Создать новый столбец с соответствующей частью JSON

GEO СТОКГОЛЬМ, GEO Нью-Йорк, GEO МАДРИД, GEO LONDON

вместо настоящее

GEO СТОКГОЛЬМ, GEO СТОКГОЛЬМ, GEO СТОКГОЛЬМ, GEO СТОКГОЛЬМ

Код:

library(rjson) 
data <- c('["GEO STOCKHOLM","TYPE LOW"]','["GEO NEW YORK","TYPE MEDIUM"]','["GEO MADRID","TYPE HIGH"]','["GEO LONDON","TYPE MAX"]') 
df <- data.frame(data, stringsAsFactors=FALSE) 
df$geo <- grep("GEO", fromJSON(df$data), value = TRUE) 

Как вы можете видеть, я просто хочу, чтобы сохранить «гео» часть в точку с запятой, и потерять часть «типа». Глядя на ф.р. dataframe, это мой (неправильно) выход:

Incorrect output df dataframe

+0

Этот ответ может быть как-то полезен? http://stackoverflow.com/questions/40045080/r-read-and-parse-json/40046159#40046159 –

+0

Посмотрите, что производит 'fromJSON (df $ data)'. Он просто перебирается через GEOM STOCKHOLM и TYPE LOW. –

+0

Не совсем Леонардо, спасибо. Кажется, проблема заключается в том, что функция grep НЕ ПОСЕТИТ по столбцам данных df $ по какой-то причине? Кажется, что он правильно извлекает первый элемент, а затем повторяется. –

ответ

0

Что об этом?

df$geo <- sapply(sapply(df$data, FUN = fromJSON, simplify = FALSE), FUN = "[", 1) 

          data   geo 
1 ["GEO STOCKHOLM","TYPE LOW"] GEO STOCKHOLM 
2 ["GEO NEW YORK","TYPE MEDIUM"] GEO NEW YORK 
3  ["GEO MADRID","TYPE HIGH"] GEO MADRID 
4  ["GEO LONDON","TYPE MAX"] GEO LONDON 
+0

Закрыть спасибо, но все, что он делает, вставляет первый из двух элементов. Порядок может быть другим, поэтому он должен распознавать всякий раз, когда термин «GEO» присутствует в элементе и извлекает его. –

0

Спасибо, ребята, я в конечном итоге создание своей собственной функции:

getJSON <- function(x) { 
result <- grep("GEO", rjson::fromJSON(x), value = TRUE) 
return(result) 

}

А потом:

df$geo <- sapply(df$data, getJSON) 

Таким образом, я ловлю все элементы 'Гео' , независимо от количества элементов или их порядка. Ваш вклад помог мне, наконец, добраться туда. Благодарю.