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

时间:2016-06-18 02:03:41

标签: r for-loop

不幸的是,我无法在这里找到我的问题的解决方案;因此,这个新问题。

以下是我要做的事情:

使用set.seed(1234) Date <- seq(as.Date("1990-01-01"), as.Date("1990-12-01"), "months") Date <- rep(Date, 5) Species <- rep(c("cat", "lion", "tiger", "leopard", "cheetah"), each=12) Measurement <- rnorm(60) index <- sample(1:60, 10) myData <- data.frame(Date[-index], Species[-index], Measurement[-index]) 包从维基百科中读入表格并将其放入数据框中。到现在为止还挺好。现在,我想将chr项转换为带有as.numeric的num,而不是每列中的第一列和第一行。

xml2

代码运行时没有任何错误但保持chr项不变。我做错了什么?

2 个答案:

答案 0 :(得分:2)

这是因为data.frame的每一列都是一个向量,并且向量的所有元素必须是相同的类型。由于您没有将所有元素更改为键入数字,因此整个向量的类仍为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"

如果您尝试了类似vector<-as.numeric(vector)的内容,那么您将获得:

Warning message:
  NAs introduced by coercion 

您将丢失存储在矢量中的一些信息。

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

答案 1 :(得分: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。

顺便说一句,我对包裹没有任何问题。