为了账号安全,请及时绑定邮箱和手机立即绑定

将导入的json数据导入数据框

将导入的json数据导入数据框

繁花不似锦 2019-09-24 10:53:19
我有一个文件,其中包含要在R中使用的1500个json对象。我已经能够将数据作为列表导入,但是在将其强制转换为有用的结构时遇到了麻烦。我想创建一个数据框,其中每个json对象包含一行,每个key:value对包含一列。我用这个小的假数据集重新创建了我的处境:[{"name":"Doe, John","group":"Red","age (y)":24,"height (cm)":182,"wieght (kg)":74.8,"score":null},{"name":"Doe, Jane","group":"Green","age (y)":30,"height (cm)":170,"wieght (kg)":70.1,"score":500},{"name":"Smith, Joan","group":"Yellow","age (y)":41,"height (cm)":169,"wieght (kg)":60,"score":null},{"name":"Brown, Sam","group":"Green","age (y)":22,"height (cm)":183,"wieght (kg)":75,"score":865},{"name":"Jones, Larry","group":"Green","age (y)":31,"height (cm)":178,"wieght (kg)":83.9,"score":221},{"name":"Murray, Seth","group":"Red","age (y)":35,"height (cm)":172,"wieght (kg)":76.2,"score":413},{"name":"Doe, Jane","group":"Yellow","age (y)":22,"height (cm)":164,"wieght (kg)":68,"score":902}]数据的一些功能:所有对象都包含相同数量的key:value对,尽管某些值是null每个对象有两个非数字列(名称和组)名称是唯一标识符,大约有10个组名称和组整体中的许多都包含空格,逗号和其他标点符号。基于这个问题:R list(structure(list()))到数据帧,我尝试了以下操作:json_file <- "test.json"json_data <- fromJSON(json_file)asFrame <- do.call("rbind.fill", lapply(json_data, as.data.frame))有了我的真实数据和虚假数据,最后一行给我这个错误:Error in data.frame(name = "Doe, John", group = "Red", `age (y)` = 24,  :   arguments imply differing number of rows: 1, 0
查看完整描述

3 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

您只需要将NA替换为NULL:


require(RJSONIO)    


json_file <-  '[{"name":"Doe, John","group":"Red","age (y)":24,"height (cm)":182,"wieght (kg)":74.8,"score":null},

    {"name":"Doe, Jane","group":"Green","age (y)":30,"height (cm)":170,"wieght (kg)":70.1,"score":500},

    {"name":"Smith, Joan","group":"Yellow","age (y)":41,"height (cm)":169,"wieght (kg)":60,"score":null},

    {"name":"Brown, Sam","group":"Green","age (y)":22,"height (cm)":183,"wieght (kg)":75,"score":865},

    {"name":"Jones, Larry","group":"Green","age (y)":31,"height (cm)":178,"wieght (kg)":83.9,"score":221},

    {"name":"Murray, Seth","group":"Red","age (y)":35,"height (cm)":172,"wieght (kg)":76.2,"score":413},

    {"name":"Doe, Jane","group":"Yellow","age (y)":22,"height (cm)":164,"wieght (kg)":68,"score":902}]'



json_file <- fromJSON(json_file)


json_file <- lapply(json_file, function(x) {

  x[sapply(x, is.null)] <- NA

  unlist(x)

})

一旦每个元素都有一个非空值,就可以调用rbind而不会出现错误:


do.call("rbind", json_file)

     name           group    age (y) height (cm) wieght (kg) score

[1,] "Doe, John"    "Red"    "24"    "182"       "74.8"      NA   

[2,] "Doe, Jane"    "Green"  "30"    "170"       "70.1"      "500"

[3,] "Smith, Joan"  "Yellow" "41"    "169"       "60"        NA   

[4,] "Brown, Sam"   "Green"  "22"    "183"       "75"        "865"

[5,] "Jones, Larry" "Green"  "31"    "178"       "83.9"      "221"

[6,] "Murray, Seth" "Red"    "35"    "172"       "76.2"      "413"

[7,] "Doe, Jane"    "Yellow" "22"    "164"       "68"        "902"


查看完整回答
反对 回复 2019-09-24
  • 3 回答
  • 0 关注
  • 577 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信