我在R中有一个字符数据框,里面有NaNs.我需要删除任何行,NaN然后将其转换为数字数据框.
如果我只是在数据框上执行as.numeric,我会遇到以下情况
Error: (list) object cannot be coerced to type 'double'
1:
0:
Run Code Online (Sandbox Code Playgroud) 我有一个csv文件,当我使用此命令
SOLK<-read.table('Book1.csv',header=TRUE,sep=';')
Run Code Online (Sandbox Code Playgroud)
我得到了这个输出
> SOLK
Time Close Volume
1 10:27:03,6 0,99 1000
2 10:32:58,4 0,98 100
3 10:34:16,9 0,98 600
4 10:35:46,0 0,97 500
5 10:35:50,6 0,96 50
6 10:35:50,6 0,96 1000
7 10:36:10,3 0,95 40
8 10:36:10,3 0,95 100
9 10:36:10,4 0,95 500
10 10:36:10,4 0,95 100
. . . .
. . . .
. . . .
285 17:09:44,0 0,96 404
Run Code Online (Sandbox Code Playgroud)
该str(SOLK)结果这
'data.frame': 285 obs. of 3 variables:
$ Time : Factor w/ 174 levels …Run Code Online (Sandbox Code Playgroud) 我在这里遇到了一个奇怪的问题.我正在使用data.table一个非常常规的任务,但有些东西我无法解释.我已经想出了解决问题的方法,但我认为理解这里出了什么问题对我来说仍然很重要.
此代码将数据带入工作区:
library(XML)
library(data.table)
theurl <- "http://goo.gl/hOKW3a"
tables <- readHTMLTable(theurl)
new.Res <- data.table(tables[[2]][4:5][-(1:2),])
suppressWarnings(names(new.Res) <- c("Party","Cases"))
Run Code Online (Sandbox Code Playgroud)
这里有两列,Party和Cases.两者都有默认类factor.虽然,Cases应该是numeric.最终,我只想要Cases每个的总和Party.所以像这样的东西应该工作:
new.Res[,sum(Cases), by=Party]
Run Code Online (Sandbox Code Playgroud)
但这并没有给出正确的答案.我想,如果我改变类的它会工作Cases,从factor到numeric.所以我尝试了以下方法:
new.Res[,Cases := as.numeric(Cases)]
new.Res[,sum(Cases), by=Party]
Run Code Online (Sandbox Code Playgroud)
但我得到了同样错误的答案.我意识到这个问题是在改变类的发生Cases,从factor到numeric.所以我尝试了一种不同的方法,它起作用了:
第1步:重新初始化数据:
theurl <- "http://goo.gl/hOKW3a"
tables <- readHTMLTable(theurl)
new.Res <- data.table(tables[[2]][4:5][-(1:2),])
suppressWarnings(names(new.Res) <- c("Party","Cases"))
Run Code Online (Sandbox Code Playgroud)
第2步:使用不同的方法将类更改factor为numeric:
new.Res[,Cases := strtoi(Cases)]
new.Res[,sum(Cases), by=Party]
Run Code Online (Sandbox Code Playgroud)
这很好用!但是,我不确定前两种方法有什么问题.我错过了什么?