【问题标题】:R merge two data from JSONR合并来自JSON的两个数据
【发布时间】:2018-07-01 06:42:17
【问题描述】:

我对 R 比较陌生,我需要执行以下操作:

我有两个不同的 JSON 格式数据源,它们对应于两个时间序列,基于不同的时间段(但重叠)。每个表的格式为:句点、值。

我想生成一个将两者合并的表,如果相应的时期仅在 A 中定义,则将缺失的 (na) 值放入 B,反之亦然。

例子:

DataA period; valueA 1980, 1 1981, 3 1982, 4 1983, 5

DataB period; valueB 1983, 5 1984, 8 1985, 4 1986, 0 1987, 2

我愿意

Data Final period; valueA; ValueB 1980, 1, na 1981, 3, na 1982, 4, na 1983, 5, 5 1984, na, 8 1985, na, 4

我对表格、数据框和列表有点困惑,我认为这就是我的代码不起作用的原因:

data_final_A<-jsonlite::fromJSON("https://api.db.nomics.world/api/v1/json/series/imf-weo-ngap-npgdp-fra-6")
data_final_B<-jsonlite::fromJSON("https://api.db.nomics.world/api/v1/json/series/oecd-eo-fra-gap-a")

period<-data_final_A$data$values$period
value_A<-data_final_B$data$values$value

table_A<-t(rbind(period, value_A))
table_A<-as.data.frame(table_A, row.names = c("period", "value_A"))

period<-data_final_B$data$values$period
value_B<-data_final_B$data$values$value

table_B<-t(rbind(period, value_B))
table_B<-as.data.frame(table_B, row.names = c("period", "value_B"))

dplr <- merge(x= table_A, y= table_B)

我的数据集如下:

head(table_A) # table_A 持续到 2008 年

  period value_A
1   1980    -0.473
2   1981    -1.268
3   1982    -0.807
4   1983    -1.540
5   1984    -2.097
6   1985    -2.618

head(table_B) # 表 B 于 2006 年停止

  period       value_B
1   1985 -1.9656045947
2   1986 -1.9205245105
3   1987 -1.6475054919
4   1988  0.3946512289
5   1989  2.2192438689
6   1990  2.5759810216

生成的表只是一个巨大的表,大小为 dim(table_A)*dim(table_B)。

感谢您的帮助,顺便说一句,我知道我的代码非常混乱,对此我很抱歉,我仍在探索,但我真的被卡住了。

一切顺利,

T.

【问题讨论】:

  • 您正在展示您的代码,这是一个好的开始,但是我们没有您的 json 文件,也不需要读取它们的代码。在这里更有用的替代方法是最小化每个数据集(a)使用dput(head(...)) 转储或手动创建它的代码(例如data.frame(a=1,b=2))。我了解您的困惑,但如果您不提供更多信息,我们将无能为力。 (我建议将问题陈述减少到每个只有几行的数据集对您和我们都有帮助。)
  • 感谢您的建议,我已经更改了我原来的消息
  • 这是一个好的开始。现在意识到您想对两个 data.frame 进行连接/合并——我假设在 period 上——但它们之间只有一行相同。如果这是故意的,那么您的加入将是 1 行或几乎一半 NA。您的陈述 "have the size of dim(table_A)*dim(table_B)" 并没有真正的意义;代码没有这样做或建议这样做,如果这是您想要的,那么香草merge 不是您想要/需要的。

标签: json r merge


【解决方案1】:

你试过像这样加入他们

dplr <- merge(table_A, table_B, by=c("period"))

这应该可行。

【讨论】:

  • 我收到此错误“sort.list(bx[m$xi]) 中的错误:'x' 对于 'sort.list' 必须是原子的你有没有在列表上调用排序?”跨度>
  • Tochoka,如果是这种情况,那么您的数据还有其他内容。这段代码对我来说没有警告/错误。
  • 此代码在功能上与 OP 代码相同。默认行为是merge(...,by=intersect(names(x), names(y))),因此它除了显式参数之外什么都不添加。
  • 当我运行它时,我有两条错误/警告消息:第一条:table_A&lt;-t(rbind(period, value_A)) Warning message: In rbind(period, value_A) : number of columns of result is not a multiple of vector length (arg 2) 然后是Error in sort.list(bx[m$xi]) : 'x' must be atomic for 'sort.list' Have you call sort on a list?,当我运行最后一行时
  • 是否可以获取您尝试加入的数据集的架构。可能与 col 句号的类型有关。
猜你喜欢
  • 1970-01-01
  • 2022-11-23
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-04
相关资源
最近更新 更多