【发布时间】:2015-07-31 23:17:43
【问题描述】:
我有大量国际象棋游戏的单个 .pgn Portable Game Notation。游戏包含在这样的文件中:
[Event "4th Bayern-chI Bank Hofmann"]
[Site "?"]
[Date "2000.10.29"]
[Round "?"]
[White "Carlsen, Magnus"]
[Black "Cordts, Ingo"]
[ECO "A56"]
[WhiteElo "0"]
[BlackElo "2222"]
[Result "0-1"]
1. d4 Nf6 2. c4 c5 3. Nf3 cxd4 4. Nxd4 e5 5. Nb5 d5 6. cxd5 Bc5 7. N5c3 O-O 8. e3 e4 9. h3 Re8 10. g4 Re5 11. Bc4 Nbd7 12. Qb3 Ne8 13. Nd2 Nd6 14. Be2 Qh4 15. Nc4 Nxc4 16. Qxc4 b5 17. Qxb5 Rb8 18. Qa4 Nf6 19. Qc6 Nd7 20. d6 Re6 21. Nxe4 Bb7 22. Qxd7 Bxe4 23. Rh2 Bxd6 24. Bc4 Rd8 25. Qxa7 Bxh2 26. Bxe6 fxe6 27. Qa6 Bf3 28. Bd2 Qxh3 29. Qxe6+ Kh8 30. Qe7 Bc7
0-1
[Event "4th Bayern-chI Bank Hofmann"]
[Site "?"]
[Date "2000.10.30"]
[Round "?"]
[White "Kaiser, Guenter"]
[Black "Carlsen, Magnus"]
[ECO "A46"]
[WhiteElo "0"]
[BlackElo "0"]
[Result "0-1"]
1. d4 Nf6 2. Nf3 d6 3. Nc3 g6 4. e4 Bg7 5. Be2 O-O 6. O-O e5 7. Be3 h6 8. Qd2 Ng4 9. d5 f5 10. exf5 gxf5 11. h3 Nxe3 12. Qxe3 e4 13. Nd4 Qe7 14. Rad1 c5 15. dxc6 bxc6 16. Bc4+ Kh7 17. Nce2 d5 18. Bb3 c5 19. Nb5 d4 20. Qd2 Bb7 21. Nf4 a6 22. Nd5 Qe5 23. Nbc7 Ra7 24. Qa5 Nd7 25. g3 Rc8 26. Nb5 Raa8 27. Nbc7 Bxd5 28. Nxa8 Rxa8 29. Ba4 Be6 30. Kh2 f4 31. Qe1 Nf6 32. Bc6 Rc8 33. Bb7 Rc7 34. Ba8 Bd5 35. Bxd5 Nxd5 36. Qe2 fxg3+
0-1
我想将此数据作为 DataFrame 读取,其中列标题只是引号中字符串左侧的单词,行值是引号中的任何内容。另一列将包含所有移动的字符串。
我对 R 完全陌生,根本不知道如何读取尚未采用某种已知格式的文件。
readLines() 看起来很有希望。
【问题讨论】:
-
readLines确实是通常使用的。在读取文件后,您必须进行大量处理才能获得所需的数据帧,我建议将splitting 放入每个元素都是游戏的列表中,编写一个返回适当值的函数每个游戏和lapplying 到你的列表。 -
太棒了!谢谢@Gregor,我刚刚了解了
scan,这很有用,因为我可以跳过空白行,而且看起来要快得多。你知道如何按“行号”分割,这样我读入的对象中的每 12 行就是一个新的游戏元素吗? -
当然可以
split(raw_data, seq_along(raw_data) %/% 12)。
标签: r