7

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

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

4

4 回答 4

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(levels(d$x))[d$x],按照 ?factor 中的“警告”。

于 2010-12-01T22:38:31.547 回答
5

或者你可以简单地使用

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

于 2010-12-03T14:10:25.677 回答
4

根据您的说明,我建议您使用 read.table 和 header=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
于 2010-12-01T22:46:33.767 回答
1

做摘要(数据)以检查正确读取的内容。如果列不是应该是数字的,请查看 read.csv 的 colClasses 参数以强制它,这也可能导致格式不正确的数字的 NA 值。

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

于 2010-12-01T22:34:28.623 回答