2015-04-22 100 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