2015-04-22 108 views
0

我有一组框架,其中包含一组不同的变量 - 整数,因子,逻辑 - 我想将所有“NAs”重新编码为一个数字整个数据集,同时保留基础变量类。例如:如何在R中按列类更改数据帧中的值

frame <- data.frame("x" = rnorm(10), "y" = rep("A", 10)) 
frame[6,] <- NA 

dat <- as.data.frame(apply(frame,2, function(x) ifelse(is.na(x)== TRUE, -9, x))) 
dat 
str(dat) 

但是,这里整数变成因子;当我在apply()函数中包含as.numeric(x)时,会引入错误。感谢您对如何处理这个问题的所有想法。

+0

你想要你的因子列有'-9'作为一个新的水平呢?你必须选择那个或者把这些因素变成数字。 – Molx

回答

1

apply返回一个字符类型的矩阵。默认情况下,as.data.frame将其转换为因子。相反,你可以做

dat <- as.data.frame(lapply(frame, function(x) ifelse(is.na(x), -9, x))) 
+0

由于您正在用数字替换因子,因此会将所有因子转换为数字。 – Molx

+1

好点,@Molx。如果应该保留列类,可以添加'dat < - 替换(dat,Map(函数(x,cls)do.call(粘贴(“as”,cls,sep =“。”),列表(x )),dat,sapply(frame,class)))''。 ([通过](http://stackoverflow.com/questions/9214819/supply-a-vector-to-classes-of-dataframe)) – lukeA