2015-11-06 86 views
0

我有一个6列1800行的数据帧。数据从软件导出,结果为“是”,“否”和“ - ”(对于未记录的数据)。我想改变 - 对于NA,是到1,否为0.是否有一种好方法可以一次完成这一切?替换R数据帧中的值

我试过datap[datap=="-"] <- NA,它将“ - ”的所有值改为<NA>。我认为这是我想要的?然后,当我试图datap[datap=="No"] <- 0,我得到了一个错误:

> 1: In `[<-.factor`(`*tmp*`, thisvar, value = "0") : 
invalid factor level, NA generated 

而所有的“不”的价值观成为NA。我在这里做错了什么?

+0

当你在数据读取方面尝试添加两个参数'从datap < - 函数read.table(my_file,stringsAsFactors = FALSE,na.strings =“ - ”)'。然后你可以替换列值。 –

+0

使用'as.character'将列更改为'character',然后在替换之前用替换值替换或创建新级别。 – akrun

+0

谢谢!皮埃尔的答案奏效了,但是当我将“是/否”更改为1/0时,他们是字符。如何将多列更改为数字,而不更改日期列?我一直在用'datap $ taskked < - as.numeric(datap $ taskked)'来单独更改它们,但是有没有办法同时更改多个? – Madison

回答

1

这样的事情可以做:

x <- sample(c("Yes", "No", "-"), 7, repl=TRUE) 
y1 <- c("Yes", "No", "-"); y2 <- c(1, 0, NA) 
y2[match(x,y1)] 

read.table()设置的参数read.table(..., as.is=TRUE)read.table(..., stringsAsFactors=FALSE)