2

XML パッケージを使用して、Web サイトから 80 を超えるテーブルをスクレイピングすることができましたが、この数も時間の経過とともに増加します。テーブル自体はそれほど大きくはありませんが、ほとんどが 6x10 です (このサイズはテーブルによって異なり、時間の経過とともに変化します)。償還の事実は、テーブルが同じ列、つまり列名を持つ時間の 99% であるということです。例えば:

 table[1]
 A B C D E F
 1 b b 2 2 b
 2 b b 2 2 b 


 table[2]
 A B C D E F
 1 c c 2 2 c
 2 c c 2 2 c 

各変数内の観測が元のテーブルへのリンクを維持していることを確認しながら、すべてのテーブルとその観測を個別の変数 (各列 = 変数) に結合するにはどうすればよいでしょうか (たとえば、追加の変数を使用)。

さまざまな表が競技会のさまざまなラウンドの結果を参照しているため、私が達成したい最終結果は、競技会を通じて個人の進歩を追跡できるようにすることです。多くのテーブルをスクレイピングします)。

誰もが渡すことができる優れたRコードは素晴らしいものであり、この大量の情報を利用および/または分析するためのベスト プラクティスのアイデアは非常に貴重です。

4

2 に答える 2

2

投稿する前に @flodel ソリューションを見ていませんが、基本パッケージを使用した場合と同じ考えです。

dat1 <- read.table(text = '
A B C D E F
1 b b 2 2 b
2 b b 2 2 b',header=T)

dat2 <- read.table(text ='
A B C D E F
1 c c 2 2 c
2 c c 2 2 c',header=T)

アイデアは、すべての data.frames を list に入れて処理することです。

ll <- list(dat1,dat2)   ## I assume your table in a list 
ll <- lapply(seq_along(ll),function(i)cbind(ll[[i]],id = i))
do.call(rbind,ll)

  A B C D E F id
1 1 b b 2 2 b  1
2 2 b b 2 2 b  1
3 1 c c 2 2 c  2
4 2 c c 2 2 c  2

すべてを大きなdata.frameに入れる必要はないと思います。リストで扱うことができます。例えば ​​:

ll <- lapply(ll,function(dat){
  sum(rank(dat))  ## dummy rank function 
})

各ラウンドのスコアのリストを取得します

 ll
[[1]]
[1] 105

[[2]]
[1] 105
于 2013-01-02T09:47:31.493 に答える
1

2つのこと:

1) 各テーブルに ID 列を追加します。

tables <- lapply(seq_along(tables), function(i) transform(tables[[i]], ID = i))

2) 列がすべて同じではない可能性がある列をバインド/整列するには、次を使用しますplyr::rbind.fill

library(plyr)
all.data <- do.call(rbind.fill, tables)

得られるのは、すべてのデータを保持する単一の data.frame です。あなたが尋ねたように「個別の変数」を作成するには、使用できますが、attach(all.data)実際にはお勧めしません。分析のためにデータを data.frame に保持することをお勧めします。

于 2013-01-02T09:39:44.153 に答える