2010-12-01 31 views
7

我从.csv文件导入数据并附加数据集。
我的问题:一个变量是整数形式,并有295个级别。我需要使用这个变量来创建其他的,但我不知道如何处理这些关卡。R Dataframe中的级别

这些是什么,我该如何处理它们?

+0

这可能意味着一些事情,这取决于你的意思是'水平'。这听起来有点像你的数字已经被转换为因子变量,因为某个地方是一个形式很糟糕的数字,所以R将它全部转换为分类的“因子”变量。您可以在这里剪切并粘贴确切的代码和错误消息吗? – Spacedman 2010-12-01 22:18:58

+0

你读过“?factor”吗?或'?levels` – Marek 2010-12-01 22:24:24

+0

setwd(“D:/ users/me/Desktop”) data < - read.csv(“Rdata.csv”) attach(data) ctr < - for(i in 1:4722)\t {as.integer(a [i]/b [i])} – user446667 2010-12-01 22:24:49

回答

1

做摘要(数据)检查事情得到了正确的阅读。如果列不是数字,那么请查看colClasses参数以read.csv强制它,这可能也会导致格式不正确的数字的NA值。

help(read.csv)会有所帮助。

8

当你用read.table(或read.csv? - 你没有指定)读入数据时,添加参数stringsAsFactors = FALSE。然后你会得到字符数据。

如果您期望列为整数,那么您必须具有不可解释为整数的数据,因此在读取它之后转换为数字。

txt <- c("x,y,z", "1,2,3", "a,b,c") 

d <- read.csv(textConnection(txt)) 
sapply(d, class) 
     x  y  z 
##"factor" "factor" "factor" 

## we don't want factors, but characters 
d <- read.csv(textConnection(txt), stringsAsFactors = FALSE) 
sapply(d, class) 

#   x   y   z 
#"character" "character" "character" 

## convert x to numeric, and wear NAs for non numeric data 
as.numeric(d$x) 

#[1] 1 NA 
#Warning message: 
#NAs introduced by coercion 

最后,如果您要忽略这些输入详细信息并从该因子中提取整数级别,例如, as.numeric(水平(d $ x))[d $ x],按照因数中的“警告”。 !

4

从你的澄清,我建议你重做你读的语句和函数read.table头= TRUE,stringAsFactors = FALSE和as.is工作= stringsAsFactors和SEP = “”:

datinp <- read.table("Rdata.csv", header=TRUE, stringAsFactors=FALSE , 
         as.is = !stringsAsFactors , sep=",") 
datinp$a <- as.numeric(datinp$a) 
datinp$b <- as.numeric(datinp$b) 
datinp$ctr <- with(datinp, as.integer(a/b)) # no loop needed when using vector arithmetic 
5

,或者你可以简单地使用

d$x2 = as.numeric(as.character(d$x))