R嵌套for循环,运行as.numeric,但不更改为num

R嵌套for循环,运行as.numeric,但不更改为num,r,for-loop,R,For Loop,不幸的是,我在这里找不到问题的答案;因此,这是一个新问题 以下是我试图做的: 使用xml2包读入wikipedia中的表,并将其放入数据框中。到现在为止,一直都还不错。现在,我想将chr项转换为num,使用as.numeric省略每列的第一列和第一行 if(!require("pacman")) install.packages("pacman") pacman::p_load(rvest, dplyr, xml2) uebergewicht <- read_html("https://d

不幸的是,我在这里找不到问题的答案;因此,这是一个新问题

以下是我试图做的:

使用
xml2
包读入wikipedia中的表,并将其放入数据框中。到现在为止,一直都还不错。现在,我想将chr项转换为num,使用as.numeric省略每列的第一列和第一行

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])
    }
}
if(!require(“pacman”))install.packages(“pacman”)
pacman::p_负载(rvest、dplyr、xml2)
尤贝格威希特%
.[2]]%>%#链接处的第二个表
html_表(fill=TRUE)
(我在2:5中){
对于(2:6中的j){

uebergewicht[j,i]这是因为
data.frame
的每一列都是一个向量,并且向量的所有元素必须是相同的类型。由于您没有将所有元素更改为numeric类型,所以整个向量的类仍然是
chr
。请参见下面的示例

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

谢谢你的评论

我能够通过子集解决它:

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
uebergewicht%
.[[2]] %>%
html_表(fill=TRUE)

ueber_sub
read_html
来自
xml2
而不是
rvest
。我会更新您的问题。@Hack-R虽然您的评论在技术上是正确的,
rvest
库会按要求加载
xml2
包。因此,
read_html()
库(rvest)之后可用
。因此,除了
rvest
@RHertel之外,也没有必要加载
xml2
库。这就是为什么我这么说。我必须单独安装它。@Hack-R是的,软件包需要单独安装。或者可能是
install.packages(rvest,dependenciences=TRUE)
可以。但一旦安装了这两个软件包,库(rvest)
不会自动在系统上加载
xml2
(在“干净”的R会话中或在
分离(“软件包:rvest”);分离(“软件包:xml2”)
)吗?谢谢@BryanGoggin!这是缺少的部分。
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