【发布时间】:2018-09-03 03:23:54
【问题描述】:
我正在尝试从 USNO API 中提取 JSON 月球周期数据。问题是我返回的有两个 JSON 数据数组。我没有办法指定我从天文台返回的内容,所以我认为我需要在 R 中清理它。这是我的代码:
library(sqldf);
library(jsonlite);
curr_date <- Sys.Date();
Q_date <- format.Date(curr_date, "%m/%d/%Y");
moon_call <- paste0("http://api.usno.navy.mil/moon/phase?date=",Q_date,"&nump=4");
moon_json <- fromJSON(moon_call, simplifyDataFrame = TRUE);
moon_phases <- do.call("rbind.fill", lapply(moon_json$phasedata, as.data.frame));
我得到的数据是这样的:
"","error","apiversion","year","month","day","numphases","datechanged","phasedata.phase","phasedata.date","phasedata.time"
"1",FALSE,"2.1.0",2018,8,29,4,FALSE,"Last Quarter","2018 Sep 03","02:37"
"2",FALSE,"2.1.0",2018,8,29,4,FALSE,"New Moon","2018 Sep 09","18:01"
"3",FALSE,"2.1.0",2018,8,29,4,FALSE,"First Quarter","2018 Sep 16","23:15"
"4",FALSE,"2.1.0",2018,8,29,4,FALSE,"Full Moon","2018 Sep 25","02:52"
当将其转换为数据框时,我得到:
"","X[[i]]"
"1","Last Quarter"
"2","New Moon"
"3","First Quarter"
"4","Full Moon"
"5","2018 Sep 03"
"6","2018 Sep 09"
"7","2018 Sep 16"
"8","2018 Sep 25"
"9","02:37"
"10","18:01"
"11","23:15"
"12","02:52"
但我想要的是一个选择了phasedata.phase/.date/.time 列的数据框:
"","phase","date","time"
"1","Last Quarter","2018 Sep 03","02:37"
"2","New Moon","2018 Sep 09","18:01"
"3","First Quarter","2018 Sep 16","23:15"
"4","Full Moon","2018 Sep 25","02:52"
【问题讨论】:
-
那么,您的代码运行良好吗?您希望在哪一部分进行改进?
-
您是专门针对
phasedata的 - 即moon_json$phasedata吗?我认为do.call("rbind.fill", lapply(moon_json, as.data.frame));这条线让你偏离了方向 -
你做了什么改变?请编辑您的问题以阐明您所做的更改以及您现在看到的内容。还包括
curr_date的值 -
请使用更新后的代码和要求编辑您的问题;不要将它们添加为评论。
-
moon_json$phasedata是一个 3 列 4 行的 data.frame。忘记所有do.call()的东西。