【发布时间】: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不是您想要/需要的。