R에서 중첩 된 JSON 병합

Erika

안녕하세요 여러분 :이 질문에 대한 답을 찾기 위해 스택 오버플로와 나머지 인터넷을 검색했지만 찾을 수있는 답 중 어느 것도 나를 위해 작동하지 않는 것 같습니다.

카메라 트랩 연구에서 얻은 이미지에 대한 정보와 함께 수천 행의 json 데이터가 있습니다. 데이터 압축을 푸는 데 많은 문제가 있습니다. 나는 jsonlite::fromJSON아무 소용이 없습니다. as.tbl_jsontidyjson과 동일합니다 .

내 목표는 json 형식으로 저장된 각 변수에 대한 열이있는 데이터 프레임을 제공하는 코드를 작성하는 것입니다. 도울 수 있니?

여기에 내가 가지고 노는 데이터 벡터가 있지만 실제로는 데이터가 더 큰 .csv파일 에 단일 열로 있습니다. 첫 번째 행은 열 이름입니다.

annotations<-c(annotations,
"[{""task"":""T0"",""value"":[{""choice"":""NOTHINGHERE"",""answers"":{},""filters"":{}}]}]"
"[{""task"":""T0"",""value"":[{""choice"":""NOTHINGHERE"",""answers"":{},""filters"":{}}]}]"
"[{""task"":""T0"",""value"":[{""choice"":""DEERWHITETAILED"",""answers"":{""HOWMANY"":""1"",""YOUNGPRESENT"":""NO"",""ANTLERSPRESENT"":""NO"",""WHATBEHAVIORSDOYOUSEE"":[""ALERT""],""ESTIMATEOFSNOWDEPTHSEETUTORIAL"":""NOSNOWBAREGROUND"",""ISITACTIVELYRAININGORSNOWINGINTHEPICTURE"":""NO""},""filters"":{}}]}]"
"[{""task"":""T0"",""value"":[{""choice"":""NOTHINGHERE"",""answers"":{},""filters"":{}}]}]"
"[{""task"":""T0"",""value"":[{""choice"":""NOTHINGHERE"",""answers"":{},""filters"":{}}]}]"
"[{""task"":""T0"",""value"":[{""choice"":""NOTHINGHERE"",""answers"":{},""filters"":{}}]}]"
"[{""task"":""T0"",""value"":[{""choice"":""NOTHINGHERE"",""answers"":{},""filters"":{}}]}]"
"[{""task"":""T0"",""value"":[{""choice"":""NOTHINGHERE"",""answers"":{},""filters"":{}}]}]"
"[{""task"":""T0"",""value"":[{""choice"":""FISHER"",""answers"":{""HOWMANY"":""1"",""YOUNGPRESENT"":""NO"",""WHATBEHAVIORSDOYOUSEE"":[""WALKINGRUNNING"",""ALERT""],""ESTIMATEOFSNOWDEPTHSEETUTORIAL"":""1020CM"",""ISITACTIVELYRAININGORSNOWINGINTHEPICTURE"":""NO""},""filters"":{}}]}]"
"[{""task"":""T0"",""value"":[{""choice"":""NOTHINGHERE"",""answers"":{},""filters"":{}}]}]")

dput (annotations)을 실행하면 다음과 같은 결과를 얻을 수 있습니다.

structure(list(annotations = c("[{\"task\":\"T0\",\"value\":[{\"choice\":\"NOTHINGHERE\",\"answers\":{},\"filters\":{}}]}]", 
"[{\"task\":\"T0\",\"value\":[{\"choice\":\"NOTHINGHERE\",\"answers\":{},\"filters\":{}}]}]", 
"[{\"task\":\"T0\",\"value\":[{\"choice\":\"DEERWHITETAILED\",\"answers\":{\"HOWMANY\":\"1\",\"YOUNGPRESENT\":\"NO\",\"ANTLERSPRESENT\":\"NO\",\"WHATBEHAVIORSDOYOUSEE\":[\"ALERT\"],\"ESTIMATEOFSNOWDEPTHSEETUTORIAL\":\"NOSNOWBAREGROUND\",\"ISITACTIVELYRAININGORSNOWINGINTHEPICTURE\":\"NO\"},\"filters\":{}}]}]", 
"[{\"task\":\"T0\",\"value\":[{\"choice\":\"NOTHINGHERE\",\"answers\":{},\"filters\":{}}]}]", 
"[{\"task\":\"T0\",\"value\":[{\"choice\":\"NOTHINGHERE\",\"answers\":{},\"filters\":{}}]}]", 
"[{\"task\":\"T0\",\"value\":[{\"choice\":\"NOTHINGHERE\",\"answers\":{},\"filters\":{}}]}]", 
"[{\"task\":\"T0\",\"value\":[{\"choice\":\"NOTHINGHERE\",\"answers\":{},\"filters\":{}}]}]", 
"[{\"task\":\"T0\",\"value\":[{\"choice\":\"NOTHINGHERE\",\"answers\":{},\"filters\":{}}]}]", 
"[{\"task\":\"T0\",\"value\":[{\"choice\":\"FISHER\",\"answers\":{\"HOWMANY\":\"1\",\"YOUNGPRESENT\":\"NO\",\"WHATBEHAVIORSDOYOUSEE\":[\"WALKINGRUNNING\",\"ALERT\"],\"ESTIMATEOFSNOWDEPTHSEETUTORIAL\":\"1020CM\",\"ISITACTIVELYRAININGORSNOWINGINTHEPICTURE\":\"NO\"},\"filters\":{}}]}]", 
"[{\"task\":\"T0\",\"value\":[{\"choice\":\"NOTHINGHERE\",\"answers\":{},\"filters\":{}}]}]"
)), class = "data.frame", row.names = c(NA, -10L))
서양 평지

찾고있는 출력 형식이 정확히 무엇인지 정확히 알 수는 없습니다. 이를 수행 할 수있는 다양한 방법이 있습니다. 또한 데이터 구조의 배열 (각각 하나의 개체 만 포함) 은 더 많은 개체를 포함 할 있기 때문에 문제가 약간 복잡 합니다.

어쨌든 tidyjson덕분에 너무 많은 코드가 필요하지 않습니다 spread_all(). 을 사용하여 특정 값만 퍼뜨 spread_values()리거나 enter_object(answers)답변을 퍼뜨릴 수도 있습니다. 도움이되기를 바랍니다.

library(tidyjson)
#> 
#> Attaching package: 'tidyjson'
#> The following object is masked from 'package:stats':
#> 
#>     filter
library(tibble)

annotations <- structure(list(annotations = c("[{\"task\":\"T0\",\"value\":[{\"choice\":\"NOTHINGHERE\",\"answers\":{},\"filters\":{}}]}]", 
                                              "[{\"task\":\"T0\",\"value\":[{\"choice\":\"NOTHINGHERE\",\"answers\":{},\"filters\":{}}]}]", 
                                              "[{\"task\":\"T0\",\"value\":[{\"choice\":\"DEERWHITETAILED\",\"answers\":{\"HOWMANY\":\"1\",\"YOUNGPRESENT\":\"NO\",\"ANTLERSPRESENT\":\"NO\",\"WHATBEHAVIORSDOYOUSEE\":[\"ALERT\"],\"ESTIMATEOFSNOWDEPTHSEETUTORIAL\":\"NOSNOWBAREGROUND\",\"ISITACTIVELYRAININGORSNOWINGINTHEPICTURE\":\"NO\"},\"filters\":{}}]}]", 
                                              "[{\"task\":\"T0\",\"value\":[{\"choice\":\"NOTHINGHERE\",\"answers\":{},\"filters\":{}}]}]", 
                                              "[{\"task\":\"T0\",\"value\":[{\"choice\":\"NOTHINGHERE\",\"answers\":{},\"filters\":{}}]}]", 
                                              "[{\"task\":\"T0\",\"value\":[{\"choice\":\"NOTHINGHERE\",\"answers\":{},\"filters\":{}}]}]", 
                                              "[{\"task\":\"T0\",\"value\":[{\"choice\":\"NOTHINGHERE\",\"answers\":{},\"filters\":{}}]}]", 
                                              "[{\"task\":\"T0\",\"value\":[{\"choice\":\"NOTHINGHERE\",\"answers\":{},\"filters\":{}}]}]", 
                                              "[{\"task\":\"T0\",\"value\":[{\"choice\":\"FISHER\",\"answers\":{\"HOWMANY\":\"1\",\"YOUNGPRESENT\":\"NO\",\"WHATBEHAVIORSDOYOUSEE\":[\"WALKINGRUNNING\",\"ALERT\"],\"ESTIMATEOFSNOWDEPTHSEETUTORIAL\":\"1020CM\",\"ISITACTIVELYRAININGORSNOWINGINTHEPICTURE\":\"NO\"},\"filters\":{}}]}]", 
                                              "[{\"task\":\"T0\",\"value\":[{\"choice\":\"NOTHINGHERE\",\"answers\":{},\"filters\":{}}]}]"
)), class = "data.frame", row.names = c(NA, -10L))

ant <- tibble(raw = annotations$annotations)

as.tbl_json(ant, json.column = "raw") %>%
  gather_array("object_id") %>% 
  spread_all() %>%
  enter_object("value") %>%
  gather_array("value_id") %>%
  spread_all() %>%
  as_tibble()
#> # A tibble: 10 x 9
#>    object_id task  value_id choice answers.HOWMANY answers.YOUNGPR…
#>        <int> <chr>    <int> <chr>  <chr>           <chr>           
#>  1         1 T0           1 NOTHI… <NA>            <NA>            
#>  2         1 T0           1 NOTHI… <NA>            <NA>            
#>  3         1 T0           1 DEERW… 1               NO              
#>  4         1 T0           1 NOTHI… <NA>            <NA>            
#>  5         1 T0           1 NOTHI… <NA>            <NA>            
#>  6         1 T0           1 NOTHI… <NA>            <NA>            
#>  7         1 T0           1 NOTHI… <NA>            <NA>            
#>  8         1 T0           1 NOTHI… <NA>            <NA>            
#>  9         1 T0           1 FISHER 1               NO              
#> 10         1 T0           1 NOTHI… <NA>            <NA>            
#> # … with 3 more variables: answers.ANTLERSPRESENT <chr>,
#> #   answers.ESTIMATEOFSNOWDEPTHSEETUTORIAL <chr>,
#> #   answers.ISITACTIVELYRAININGORSNOWINGINTHEPICTURE <chr>

reprex 패키지 (v0.3.0)에 의해 2020-03-14에 생성됨

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Pandas에서 중첩 된 JSON 병합

분류에서Dev

중첩 된 json 목록에서 Pandas DataFrame 병합

분류에서Dev

Python에서 중첩 된 목록 병합

분류에서Dev

Python에서 중첩 된 사전 병합

분류에서Dev

C #에서 중첩 된 사전 병합

분류에서Dev

돼지에 중첩 된 병합

분류에서Dev

Spark Structed Streaming은 kafka에서 중첩 된 json을 읽고이를 병합합니다.

분류에서Dev

많은 열 유형 (일부 중첩)으로 중첩 된 json 병합

분류에서Dev

중첩 된 사전 병합

분류에서Dev

중첩 된 튜플 병합

분류에서Dev

중첩 된 콜백 병합

분류에서Dev

중첩 된 JSON 구조를 선택적으로 병합

분류에서Dev

병합되고 CSV로 저장되는 중첩 된 JSON 파일

분류에서Dev

Python에서 중첩 된 JSON에 값을 전달합니까?

분류에서Dev

F # 계산 식에서 중첩 된 튜플 병합

분류에서Dev

병합 사전에서 중첩 된 Python 사전 빌드

분류에서Dev

Ruby에서 덮어 쓰지 않고 중첩 된 해시 병합

분류에서Dev

R의 중첩 된 함수 내에서 함수의 출력 병합

분류에서Dev

RestController에서 중첩 된 JSON을 어떻게 매핑합니까?

분류에서Dev

Python은 panda.json_normalize로 중첩 된 json 사전을 병합합니다.

분류에서Dev

SQL보기에 대해 중첩 된 XML 병합

분류에서Dev

PHP에서 중첩 된 Json 인쇄

분류에서Dev

ColdFusion에서 중첩 된 JSON 생성

분류에서Dev

MySQL (PHP)에서 중첩 된 JSON

분류에서Dev

중첩 된 JSON에서 키 찾기

분류에서Dev

JSON에 중첩 된 결과 배열을 반복합니다.

분류에서Dev

Moshi는 중첩 된 JSON 값을 필드에 매핑합니다.

분류에서Dev

중첩 된 JSON을 파일에 쓰려고합니다.

분류에서Dev

IF 문에 중첩 된 병합; 다층 평탄화에서 재 입력

Related 관련 기사

뜨겁다태그

보관