我从 .csv 文件导入数据,并附加了数据集。
我的问题:一个变量是整数形式,有 295 个级别。我需要使用这个变量来创建其他变量,但我不知道如何处理级别。
这些是什么,我该如何处理它们?
当您使用 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 中的“警告”。
或者你可以简单地使用
d$x2 = as.numeric(as.character(d$x))
.
根据您的说明,我建议您使用 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
做摘要(数据)以检查正确读取的内容。如果列不是应该是数字的,请查看 read.csv 的 colClasses 参数以强制它,这也可能导致格式不正确的数字的 NA 值。
help(read.csv) 会有所帮助。