2017-05-05 3 views
-4

API 쿼리의 끝점에서 각각 19 개의 요소로 구성된 370 개의 목록을 가져옵니다. 나는 이것을 R에서 19 열을 가진 370 행으로 변환하려하고있다.데이터 프레임 목록 목록

나는 as.dataframe을 시도 할 때, 인자가 다른 행 수를 암시한다 : 1, 0 lapply (datos, ldply) 다음 오류가 발생합니다. 결과는 모두 원자 단위 또는 모든 데이터 프레임이어야합니다.

또한 병합 목록 게시를 시도했습니다. 내가

내 데이터를 원하는 것을 내가 주제에 이전과 비슷한 질문을 확인 대답을했지만, 나는하지 않았다 : 1 0

PS를 : 인수가 행의 다른 수를 의미 :뿐만 아니라 메시지가 :

[enter image description here]

예상 출력 : 19 개 컬럼

+0

http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/28481250#28481250 – Frank

+0

감사합니다. 내 데이터를 보여달라고 제안하는거야? 내가 어떻게 할 수 있는지 잘 모르겠다. Snipping Tool과 붙여 넣기를 사용할 것인가? – cyrilmadrid

+0

이 주석 상자에 붙여 넣으려고했는데 작동하지 않습니다. – cyrilmadrid

답변

1

370 행 dataframe에리스트 엘리먼트를 캐스팅의 과제 인 NULL 엔티티를 필터링 고려한다.

데이터Dataframe 구축

inner <- 
    list(
    loandId = 2, 
    websiteLoanId = 2, 
    loanName = "Nottingham Student Accodomodation Development Project", 
    amount = 1500000.0, 
    principalRemaining = "0.00", 
    firstDrawDate = "2013-04-16T07:36.08.000z", 
    status = "repaid", 
    sector = NULL, 
    category = "development", 
    holdings = list(1,2,3,4,5), 
    aftermarketForSale = list("a", "b", "c", "d", "e") 
) 

datos= list(loans = lapply(seq(370), function(i) inner)) 

(표시 스크린의 부분을 재현)

# FILTER OUT NULLs 
datos$loans <- lapply(datos$loans, function(item) 
    Filter(function(i) length(i) == 1, item) 
) 

# IF ALL ELEMENTS ARE THE SAME (I.E., NULL DROPS SAME ITEM) 
loansdf <- do.call(rbind, lapply(datos$loans, data.frame)) 

# IF NULL DROPS ABOVE ARE NOT SAME, USE BELOW PACKAGES FOR RBINDING METHOS 
loansdf <- plyr::rbind.fill(datos$loans) 
loansdf <- dplyr::bind_rows(datos$loans) 
loansdf <- data.table::rbindlist(datos$loans) 

출력

loansdf 
# loandId websiteLoanId            loanName amount principalRemaining   firstDrawDate status 
# 1   2    2 Nottingham Student Accodomodation Development Project 1500000    0.00 2013-04-16T07:36.08.000z repaid 
# 2   2    2 Nottingham Student Accodomodation Development Project 1500000    0.00 2013-04-16T07:36.08.000z repaid 
# 3   2    2 Nottingham Student Accodomodation Development Project 1500000    0.00 2013-04-16T07:36.08.000z repaid 
# 4   2    2 Nottingham Student Accodomodation Development Project 1500000    0.00 2013-04-16T07:36.08.000z repaid 
# 5   2    2 Nottingham Student Accodomodation Development Project 1500000    0.00 2013-04-16T07:36.08.000z repaid 
# 6   2    2 Nottingham Student Accodomodation Development Project 1500000    0.00 2013-04-16T07:36.08.000z repaid 
# 7   2    2 Nottingham Student Accodomodation Development Project 1500000    0.00 2013-04-16T07:36.08.000z repaid 
# 8   2    2 Nottingham Student Accodomodation Development Project 1500000    0.00 2013-04-16T07:36.08.000z repaid 
+0

당신의 노력에 감사를 표한다. Parfait. 당신이 제안한,하지만 필드의 일부는 또한 --aftermarketForSale 및 holdings- 볼 수없는 목록이기 때문에 완전히 내부 첫 번째 레지스터에 복사 할 수 없습니다. 그리고 아니요, NULL이 모두 동일하지는 않습니다. 모든 필드가 null이 아닌 것은 ... ... 내 데이터에 대한보다 완전한 뷰를 게시했습니다. – cyrilmadrid

+0

첫 번째 단계없이 Dataframe 빌드를 시도했지만 Filter Nulls가 작동하지만 plyr, dplyr, data.table에서 오류가 발생했습니다. loansdf <- plyr :: rbind.fill (datos $ loans) 오류 : rbind에 대한 모든 입력 .fill은 data.frames 여야합니다. > loansdf <- dplyr :: bind_rows (datos $ loans) bind_rows_ (x, .id)의 오류 : 호환되지 않는 크기 (1! = 2) > loansdf <- data.table :: rbindlist (datos $ loans) data.table :: rbindlist (datos $ loans)의 오류 : 항목 2의 항목 수가 16이고 항목 1과 일치하지 않는 항목이 13 개 있습니다. 누락 된 열을 채울 필요가있는 경우 set 인수 'fill'을 TRUE로 사용하십시오. – cyrilmadrid

+0

아쉽게도 스크린 샷에만 표시되는 구조를 다시 만들려고 할 때 * Data * 예제를 실행할 필요가 없습니다. 나는 실제로이 일을하기 위해 나섰다. 자원/응답자에게 데이터/코드 부담을 가하지 마십시오. – Parfait