2016-06-18 3 views
1

残念ながら、私はここで私の質問に対する解決策を見つけることができませんでした。したがって、この新しい質問。 xml2パッケージとウィキペディアから表にRはas.numericの実行で入れ子になっていますが、numには変わりません

読むと、データフレームにそれを置く:ここ

は私がしようとしているものです。ここまでは順調ですね。さて、私はすべての列の最初の列と最初の行を省略as.numericとchrの項目をnumに変換したいと思います。

if(!require("pacman")) install.packages("pacman") 
pacman::p_load(rvest, dplyr, xml2) 
uebergewicht <- read_html("https://de.wikipedia.org/wiki/%C3%9Cbergewicht") 


uebergewicht <- uebergewicht %>% 
    html_nodes("table") %>% 
    .[[2]] %>% # table number two at link 
    html_table(fill=TRUE) 

for (i in 2:5){ 
    for (j in 2:6){ 
     uebergewicht[j,i] <- as.numeric(uebergewicht[j,i]) 
    } 
} 

コードはエラーなく実行されますが、chr項目は変更されません。私は間違って何をしていますか?

+0

'read_html'は' rml'ではなく 'xml2'からのものです。あなたの質問を更新します。 –

+0

@ Hack-Rあなたのコメントは技術的に正しいものですが、 'rvest'ライブラリは' xml2'を必要なパッケージとして読み込みます。したがって 'read_html()'は 'library(rvest)'の後に存在します。したがって、 'rvest'に加えて' xml2'ライブラリを読み込む必要もありません。 – RHertel

+0

@RHertelそれは私のためではありませんでした。それが私が言った理由です。私は別にそれをインストールしなければならなかった。 –

答えて

2

data.frameの各列はベクトルであり、ベクトルのすべての要素は同じ型でなければならないからです。すべての要素を数値に変更するわけではないので、ベクトル全体のクラスはchrのままです。以下の例を参照してください。

Warning message: 
    NAs introduced by coercion 
をそして、あなたはあなたのベクトルに格納されている情報の一部を失うことになる:あなたは vector<-as.numeric(vector)ような何かをしようとした場合

vector<-c("a", as.numeric(1), as.numeric(3), as.numeric(5)) 
str(vector) 
chr [1:4] "a" "1" "3" "5" 

vector[2:4]<-as.numeric(vector[2:4]) 
str(vector) 
chr [1:4] "a" "1" "3" "5" 

あなたはなるだろう。

str(vector) 
num [1:4] NA 1 3 5 
+0

ありがとう@BryanGoggin!それは欠けている部分だった。 – Primesty

0

ご意見ありがとうございました!私はサブセットを経由してそれを解決することができました

:サブセットを通して

uebergewicht <- read_html("https://de.wikipedia.org/wiki/%C3%9Cbergewicht") 


uebergewicht <- uebergewicht %>% 
    html_nodes("table") %>% 
    .[[2]] %>% 
    html_table(fill=TRUE) 

ueber_sub <- uebergewicht[2:6, 2:5] 

names(ueber_sub) <- c("jungen.ueber", "jungen.adi", "mädchen.ueber", "mädchen.adi") 

for (i in 1:4){ 
ueber_sub[,i] <- as.numeric(ueber_sub[,i]) 
} 

> str(ueber_sub) 
'data.frame': 5 obs. of 4 variables: 
$ jungen.ueber : num 6.4 8.9 11.3 9 8.8 
$ jungen.adi : num 2.5 7 7 8.2 6.3 
$ maädchen.ueber: num 6 9 11.6 8.1 8.5 
$ maädchen.adi : num 3.3 5.7 7.3 8.9 6.4 

を、私たちは列ベクトルがCHR滞在する原因となる各列の最初の行、を取り除きます。行1の情報を反映するために列名を単純に再コード化しました。そのようにして、forループに入るすべてがnumに変換されます。

私はパッケージで何の問題もありませんでした。

関連する問題