在 R 中格式化 JSON 数据
Formatting JSON data in R
我对使用 JSON 数据真的很陌生,所以我有一个关于格式的问题。
这里是the link to the data I was trying to work with
我使用的是 JSONlite 并且这样做了:
shot<-"http://stats.nba.com/stats/playerdashptshotlog?DateFrom=&DateTo=&
GameSegment=&LastNGames=0&LeagueID=00&Location=&Month=0&OpponentTeamID=0&
Outcome=&Period=0&PlayerID=202322&Season=2014-15&SeasonSegment=&
SeasonType=Regular+Season&TeamID=0&VsConference=&VsDivision="
然后我从JSON:
json_data <- fromJSON(paste(readLines(shot), collapse=""))
这为我提供了列表中的数据。我的问题(尽管据我所知我搞砸了这方面的工作)是试图从这些信息中创建一个数据框。我能够用我在网站上类似问题下阅读的代码制作一个数据框,但它只是一列中的所有数据。任何建议将不胜感激!
谢谢
通常,当您获得 JSON 时,首先要做的是查看结构。
str(json_data)
这样做会揭示您的数据具有非常简单的结构:是一个包含行的数据框,一行 headers,包裹在一些关于每列含义的元数据中。使用 $
将允许您处理那些特定的组件。换句话说,您的特定 json 已经是一个数据帧结构,您只需将其从 json
中取出即可
library(jsonlite)
json_data <- fromJSON(paste(readLines(shot), collapse=""))
str(json_data)
mydf <- data.frame(json_data$resultSets$rowSet)
colnames(mydf) <- unlist(json_data$resultSets$headers)
你应该得到这样的东西:
head(mydf)
GAME_ID MATCHUP LOCATION W FINAL_MARGIN SHOT_NUMBER PERIOD
1 0021401215 APR 14, 2015 - WAS @ IND A L -4 1 1
2 0021401215 APR 14, 2015 - WAS @ IND A L -4 2 1
3 0021401215 APR 14, 2015 - WAS @ IND A L -4 3 1
4 0021401215 APR 14, 2015 - WAS @ IND A L -4 4 1
5 0021401215 APR 14, 2015 - WAS @ IND A L -4 5 1
6 0021401215 APR 14, 2015 - WAS @ IND A L -4 6 1
GAME_CLOCK SHOT_CLOCK DRIBBLES TOUCH_TIME SHOT_DIST PTS_TYPE SHOT_RESULT
1 10:33 7.7 0 1 25 3 missed
2 8:41 14 10 9.6 10.7 2 made
3 6:42 14.9 11 9.7 18.2 2 missed
4 5:16 19 3 3.5 4.2 2 made
5 4:45 19.8 3 3.7 3.3 2 missed
6 3:08 13.5 10 9.7 18 2 missed
CLOSEST_DEFENDER CLOSEST_DEFENDER_PLAYER_ID CLOSE_DEF_DIST FGM PTS
1 Hill, George 201588 4.3 0 0
2 Hill, George 201588 5.7 1 2
3 Hill, George 201588 3 0 0
4 Miles, CJ 101139 4 1 2
5 Hill, Solomon 203524 3 0 0
6 Hill, George 201588 4.5 0 0
我对使用 JSON 数据真的很陌生,所以我有一个关于格式的问题。
这里是the link to the data I was trying to work with
我使用的是 JSONlite 并且这样做了:
shot<-"http://stats.nba.com/stats/playerdashptshotlog?DateFrom=&DateTo=&
GameSegment=&LastNGames=0&LeagueID=00&Location=&Month=0&OpponentTeamID=0&
Outcome=&Period=0&PlayerID=202322&Season=2014-15&SeasonSegment=&
SeasonType=Regular+Season&TeamID=0&VsConference=&VsDivision="
然后我从JSON:
json_data <- fromJSON(paste(readLines(shot), collapse=""))
这为我提供了列表中的数据。我的问题(尽管据我所知我搞砸了这方面的工作)是试图从这些信息中创建一个数据框。我能够用我在网站上类似问题下阅读的代码制作一个数据框,但它只是一列中的所有数据。任何建议将不胜感激!
谢谢
通常,当您获得 JSON 时,首先要做的是查看结构。
str(json_data)
这样做会揭示您的数据具有非常简单的结构:是一个包含行的数据框,一行 headers,包裹在一些关于每列含义的元数据中。使用 $
将允许您处理那些特定的组件。换句话说,您的特定 json 已经是一个数据帧结构,您只需将其从 json
library(jsonlite)
json_data <- fromJSON(paste(readLines(shot), collapse=""))
str(json_data)
mydf <- data.frame(json_data$resultSets$rowSet)
colnames(mydf) <- unlist(json_data$resultSets$headers)
你应该得到这样的东西:
head(mydf)
GAME_ID MATCHUP LOCATION W FINAL_MARGIN SHOT_NUMBER PERIOD
1 0021401215 APR 14, 2015 - WAS @ IND A L -4 1 1
2 0021401215 APR 14, 2015 - WAS @ IND A L -4 2 1
3 0021401215 APR 14, 2015 - WAS @ IND A L -4 3 1
4 0021401215 APR 14, 2015 - WAS @ IND A L -4 4 1
5 0021401215 APR 14, 2015 - WAS @ IND A L -4 5 1
6 0021401215 APR 14, 2015 - WAS @ IND A L -4 6 1
GAME_CLOCK SHOT_CLOCK DRIBBLES TOUCH_TIME SHOT_DIST PTS_TYPE SHOT_RESULT
1 10:33 7.7 0 1 25 3 missed
2 8:41 14 10 9.6 10.7 2 made
3 6:42 14.9 11 9.7 18.2 2 missed
4 5:16 19 3 3.5 4.2 2 made
5 4:45 19.8 3 3.7 3.3 2 missed
6 3:08 13.5 10 9.7 18 2 missed
CLOSEST_DEFENDER CLOSEST_DEFENDER_PLAYER_ID CLOSE_DEF_DIST FGM PTS
1 Hill, George 201588 4.3 0 0
2 Hill, George 201588 5.7 1 2
3 Hill, George 201588 3 0 0
4 Miles, CJ 101139 4 1 2
5 Hill, Solomon 203524 3 0 0
6 Hill, George 201588 4.5 0 0