2014-12-27 7 views
1

fromJSON()을 사용하여 웹 서비스의 JSON 데이터를 R로 가져옵니다.다중 차원 목록을 필터링하여 행렬로 변환

이 함수는 데이터를 다중 차원 R 목록 (x)으로 반환합니다.

제 목표는이 목록을 duration $ value를 사용하여 $ rows 행으로부터 x, y 행렬로 변환하는 것입니다.

이 나는 ​​기간 $ 값을 반환 할 수있는 목록을 필터링 한 후

output <- matrix(unlist(x$rows), ncol = 4, byrow = TRUE) 

기간 $ 값을 반환 목록의 목록을 필터링하는 가장 좋은 방법은 무엇입니까 같은 것을 사용할 수 생각?

dput(x$rows) 

    list(structure(list(elements = list(structure(list(distance = structure(list(
    text = "1 m", value = 0), .Names = c("text", "value")), duration = structure(list(
    text = "1 min", value = 0), .Names = c("text", "value")), 
    status = "OK"), .Names = c("distance", "duration", "status" 
)), structure(list(distance = structure(list(text = "27.0 km", 
    value = 26970), .Names = c("text", "value")), duration = structure(list(
    text = "5 hours 25 mins", value = 19487), .Names = c("text", 
"value")), status = "OK"), .Names = c("distance", "duration", 
"status")), structure(list(distance = structure(list(text = "59.4 km", 
    value = 59410), .Names = c("text", "value")), duration = structure(list(
    text = "12 hours 11 mins", value = 43836), .Names = c("text", 
"value")), status = "OK"), .Names = c("distance", "duration", 
"status")), structure(list(distance = structure(list(text = "43.0 km", 
    value = 42976), .Names = c("text", "value")), duration = structure(list(
    text = "8 hours 45 mins", value = 31526), .Names = c("text", 
"value")), status = "OK"), .Names = c("distance", "duration", 
"status")))), .Names = "elements"), structure(list(elements = list(
    structure(list(distance = structure(list(text = "27.0 km", 
     value = 26970), .Names = c("text", "value")), duration = structure(list(
     text = "5 hours 25 mins", value = 19490), .Names = c("text", 
    "value")), status = "OK"), .Names = c("distance", "duration", 
    "status")), structure(list(distance = structure(list(text = "1 m", 
     value = 0), .Names = c("text", "value")), duration = structure(list(
     text = "1 min", value = 0), .Names = c("text", "value" 
    )), status = "OK"), .Names = c("distance", "duration", "status" 
    )), structure(list(distance = structure(list(text = "55.5 km", 
     value = 55488), .Names = c("text", "value")), duration = structure(list(
     text = "11 hours 27 mins", value = 41231), .Names = c("text", 
    "value")), status = "OK"), .Names = c("distance", "duration", 
    "status")), structure(list(distance = structure(list(text = "19.7 km", 
     value = 19744), .Names = c("text", "value")), duration = structure(list(
     text = "4 hours 4 mins", value = 14629), .Names = c("text", 
    "value")), status = "OK"), .Names = c("distance", "duration", 
    "status")))), .Names = "elements"), structure(list(elements = list(
    structure(list(distance = structure(list(text = "59.4 km", 
     value = 59354), .Names = c("text", "value")), duration = structure(list(
     text = "12 hours 7 mins", value = 43640), .Names = c("text", 
    "value")), status = "OK"), .Names = c("distance", "duration", 
    "status")), structure(list(distance = structure(list(text = "55.5 km", 
     value = 55487), .Names = c("text", "value")), duration = structure(list(
     text = "11 hours 24 mins", value = 41039), .Names = c("text", 
    "value")), status = "OK"), .Names = c("distance", "duration", 
    "status")), structure(list(distance = structure(list(text = "1 m", 
     value = 0), .Names = c("text", "value")), duration = structure(list(
     text = "1 min", value = 0), .Names = c("text", "value" 
    )), status = "OK"), .Names = c("distance", "duration", "status" 
    )), structure(list(distance = structure(list(text = "39.1 km", 
     value = 39111), .Names = c("text", "value")), duration = structure(list(
     text = "7 hours 58 mins", value = 28703), .Names = c("text", 
    "value")), status = "OK"), .Names = c("distance", "duration", 
    "status")))), .Names = "elements"), structure(list(elements = list(
    structure(list(distance = structure(list(text = "43.0 km", 
     value = 42976), .Names = c("text", "value")), duration = structure(list(
     text = "8 hours 48 mins", value = 31656), .Names = c("text", 
    "value")), status = "OK"), .Names = c("distance", "duration", 
    "status")), structure(list(distance = structure(list(text = "19.7 km", 
     value = 19744), .Names = c("text", "value")), duration = structure(list(
     text = "4 hours 5 mins", value = 14694), .Names = c("text", 
    "value")), status = "OK"), .Names = c("distance", "duration", 
    "status")), structure(list(distance = structure(list(text = "39.1 km", 
     value = 39113), .Names = c("text", "value")), duration = structure(list(
     text = "8 hours 3 mins", value = 28957), .Names = c("text", 
    "value")), status = "OK"), .Names = c("distance", "duration", 
    "status")), structure(list(distance = structure(list(text = "1 m", 
     value = 0), .Names = c("text", "value")), duration = structure(list(
     text = "1 min", value = 0), .Names = c("text", "value" 
    )), status = "OK"), .Names = c("distance", "duration", "status" 
    )))), .Names = "elements")) 
+0

를이 나에게 첫 번째 열을 제공 @docendodiscimus. 실제로는 4 개의 열이 있습니다. – Leehbi

답변

2

sapply(x$rows, function(.x) sapply(.x$elements, 
       function(y) y[['duration']]$value)) 

#  [,1] [,2] [,3] [,4] 
#[1,]  0 19490 43640 31656 
#[2,] 19487  0 41039 14694 
#[3,] 43836 41231  0 28957 
#[4,] 31526 14629 28703  0 

시도하거나 당신이 할 수 있습니다 :

x2 <- unlist(x$rows) 
matrix(as.numeric(unname(x2[grep('duration.value', 
           names(x2))])),ncol=4) 
#  [,1] [,2] [,3] [,4] 
#[1,]  0 19490 43640 31656 
#[2,] 19487  0 41039 14694 
#[3,] 43836 41231  0 28957 
#[4,] 31526 14629 28703  0