我有一个包含大量棋谱游戏的单个.pgn(便携式游戏符号)文件。该文件中的游戏内容如下:
[Event "FIDE World Cup 2017"]
[Site "Tbilisi GEO"]
[Date "2017.09.05"]
[Round "1.1"]
[White "Carlsen, Magnus"]
[Black "Balogun, Oluwafemi"]
[Result "1-0"]
[WhiteTitle "GM"]
[BlackTitle "FM"]
[WhiteElo "2822"]
[BlackElo "2255"]
[ECO "B00"]
[Opening "King's pawn opening"]
[WhiteFideId "1503014"]
[BlackFideId "8501246"]
[EventDate "2017.09.03"]
1. e4 d6 2. d4 g6 3. Bc4 Nf6 4. Qe2 Nc6 5. Nf3 Bg7 6. O-O Bg4 7. c3 O-O
8. h3 Bxf3 9. Qxf3 e5 10. Rd1 Qe8 11. d5 Ne7 12. Qe2 Nh5 13. Bb5 Qc8
14. Na3 a6 15. Ba4 f5 16. Bc2 f4 17. Qg4 Qxg4 18. hxg4 Nf6 19. g5 Nd7
20. Nc4 b6 21. b4 h6 22. gxh6 Bxh6 23. g4 Nf6 24. f3 Bg5 25. Kg2 Kg7
26. a4 Bh4 27. Bd2 g5 28. Rh1 Ng6 29. Kf1 Rh8 30. Ke2 Bg3 31. a5 b5 32.
Na3 Ne7 33. c4 c6 34. dxc6 Nxc6 35. Bc3 Rxh1 36. Rxh1 bxc4 37. Nxc4 Rb8
38. Nxd6 Kg6 39. Nf5 1-0
[Event "FIDE World Cup 2017"]
etc...
我想用这些数据创建一个数据框,其中列标题是每个字符串左侧的单词,数据是字符串。然后为PGN字符串单独创建一列。
我已经参考了R: How to read in a PGN as a Data Frame中的方法尝试了一下,得出了以下结论:
pgn <- read.table("~/Desktop/GitHub/Chess/test.pgn", quote="",
stringsAsFactors=FALSE)
# get column names
column_names <- sub("\\[(\\w+).+", "\\1", pgn[1:17,1])
column_names[17] <- "PGN"
#create DF
pgn.df <- data.frame(matrix(sub("\\[\\w+ \\\"(.+)\\\"\\]", "\\1",
pgn[,1]),byrow=TRUE, ncol=17))
names(pgn.df) <- column_names
这里的问题是我的pgn信息有多行。那么有没有办法在正则表达式中考虑到这一点?或者有没有自动将文件更改为使pgn成为单行的方法?
谢谢!
`pgn <- sub("/?:[^\[\]\n])[\n]/g", pgn)` `Error: '\[' is an unrecognized escape in character string starting ""/?:[^\["`
你知道为什么吗?能否在代码中向我展示一下?谢谢。 - Griffin Kennedy