【问题标题】:Import as data.frame numeric and select json variables导入为 data.frame 数字并选择 json 变量
【发布时间】:2018-04-19 23:18:05
【问题描述】:

我有一个 .csv 文件,其中包含两个数字列和一个 json 格式的列。我想从 json 列中导入数字列以及一些变量。 json 列有数百个变量,其中许多具有相同的名称,我只对其中几个感兴趣:有没有办法从 json 中使用它们的编号位置导入选定数量的变量?

 address    |  zip  |  response
 102 N8 st    11248   {"Building Lat": "74.91", "Lon": "31.21", "Front Lat": "75.93", "Lon": "32.20"}
 76 Hope st   14258   {"Building Lat": "75.82", "Lon": "29.18", "Front Lat": "76.89", "Lon": "28.12"}

当我导入为 read_csv 时,我得到一个类似于上面示例的 tibble:假设我想在 R 中将地址和 zip 导入为 data.frame,以及来自 json 响应变量的前两个变量 (建筑经纬度)。

这与this question 有点相关,但无法在此示例中复制该答案。我已经尝试过 Jsonlite 包,但无法绕过它。

【问题讨论】:

  • 这不是 CSV 格式的文件。

标签: r json


【解决方案1】:

这是你想要的吗?

require(jsonlite)

df <- data.frame(address = c("102 N8 st", "76 Hope st"),
                 zip = c(11248, 14258),
                 response = c('{"Building Lat": "74.91", "Lon": "31.21", "Front Lat": "75.93", "Lon": "32.20"}',
                              '{"Building Lat": "75.82", "Lon": "29.18", "Front Lat": "76.89", "Lon": "28.12"}'),
                 stringsAsFactors = FALSE)

x1 <- sapply(df$response, FUN = function(x) {as.numeric(fromJSON(x)[[1]])})
x2 <- sapply(df$response, FUN = function(x) {as.numeric(fromJSON(x)[[2]])})

names(x1) <- NULL
names(x2) <- NULL

new_df <- data.frame(address = df$address,
                     zip = df$zip,
                     x1 = x1, 
                     x2 = x2)

【讨论】:

  • 对于我在那里展示的小例子,这正是我想要的,谢谢!但是,当我尝试对完整数据库执行此操作时,我收到以下错误,知道我缺少的 T/F 是什么吗? if (is.character(txt) && length(txt) == 1 && nchar(txt, type = "bytes")
  • 您可能有一些 JSON 单元丢失或格式不正确。尝试先过滤它们。以df %&gt;% filter(!is.na(response)) 为例。
猜你喜欢
  • 1970-01-01
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
  • 2022-10-07
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多