2016-04-14 21 views
0

Ben json dize içeren bir sütunu olan data_df adlı veri çerçevem ​​var, sütun adı json_response.didyr içinde tidyjson kullanımı

Ondan çok özel anahtar-değer erişimi istiyorum. Aşağıdaki gibi json dizisinden birinin örneği. Dizede başarı kaç kez doğru olduğunu bilmek istiyorum.

x = "[{\"s\":\"D\",\"success\":true,\"start.time\":\"2016-01-27 19:27:27\",\"stop.time\":\"2016-01-27 19:27:30\",\"status_code\":200,\"called\":true,\"milliseconds\":3738.6858,\"_row\":\"DataX\"},{\"s\":\"C\",\"success\":true,\"start.time\":\"2016-01-27 19:27:30\",\"stop.time\":\"2016-01-27 19:27:32\",\"status_code\":200,\"called\":true,\"milliseconds\":1815.1433,\"_row\":\"Clarity\"}]" 

Ben sadece tidyjson kullanmak istiyorsanız istediğim gibi çalıştığı, aşağıdaki gibi, bunu yapabiliriz.

library(dplyr) 
library(tidyjson) 
x %>% gather_array %>% 
    spread_values(called = jstring("called")) %>% 
    summarize(x = sum(called == "TRUE")) 

Şimdi tüm sütun için yapmak istiyorsam, nasıl yapmalıyım? Bir döngü kullanmak istemiyorum.

Kullanmaya çalıştığım kodum aşağıdadır. Böyle bir şekilde dplyr ile kombine rjson kullanabilirsiniz tidyjson kullanmak yerine

Error: not compatible with STRSXP 
+0

olarak, – akrun

+0

nedeniyle json formatında bugüne kadar bunu midir uyumlu değildir? –

+0

Bu, dönüştürücüde desteklenmeyen biçimlerden biri olabilir. – akrun

cevap

2

:

data_df %>% 
    transmute(
       test = json_response %>% gather_array %>% 
        spread_values(called = jstring("called")) %>% 
        summarize(x = sum(called=="TRUE")) 
    ) 

I izlenerek kodu çalıştırdığımda var hatadır

data_df$test <- data_df %>% rowwise %>% 
     do(test = .$json_response %>% as.character %>% fromJSON %>% sapply(`[[`, "called") %>% sum) %>% 
     as.data.frame 
0

Bunun için 210, basitçe bir tbl_json nesnesine data_df dönüştürmek ve sonra önceki gibi devam: Hata diyor

data_df %>% 
    as.tbl_json(json.column = "json_response") %>% 
    # track each document if you don't already have an ID 
    mutate(rownum = 1:n()) %>% 
    gather_array %>%   
    # use jlogical for correct type 
    spread_values(success = jlogical("success")) %>% 
    group_by(rownum) %>% 
    summarize(num.successes = sum(success)) 
İlgili konular