导入为data.frame数字并选择json变量

时间:2018-04-19 14:39:02

标签: r json

我有一个带有两个数字列和一个json格式的.csv文件。我想导入数字列以及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中的data.frame地址和zip,以及来自json响应变量的前两个变量(建立Lat和Lon)。

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

1 个答案:

答案 0 :(得分: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)