在R中用0替换None

时间:2014-03-14 20:48:19

标签: r

所以我的数据中没有穿插在数字向量中的数据,比如这个 -

Lot.Frontage    Lot.Area
34                  3901
70                  8400
60                  7200
64                  7018
111                 16259
50                  4280
155                 20064
60                  7200
70                  9100
None            6449
55                  7642
None            28698

我想用0替换None。

我试过这个

ames.data[ames.data == "None"] <- 0

但这给了我一个&lt; NA>哪里都没有。

如何将None替换为0?

3 个答案:

答案 0 :(得分:2)

以下是如何在所有列上执行此操作。我在"None"中生成了一些Lot.Area来显示

sapply(ames.data, class)
## Lot.Frontage     Lot.Area                                                                                                                                                                                                                  
##     "factor"    "integer"                                                                                                                                                                                                                  

ames.data$Lot.Area <- ifelse(runif(nrow(ames.data)) < 0.25, "None", ames.data$Lot.Area)
##    Lot.Frontage Lot.Area                                                                                                                                                                                                                   
## 1            34     3901                                                                                                                                                                                                                   
## 2            70     None                                                                                                                                                                                                                   
## 3            60     None                                                                                                                                                                                                                   
## 4            64     7018                                                                                                                                                                                                                   
## 5           111    16259                                                                                                                                                                                                                   
## 6            50     4280                                                                                                                                                                                                                   
## 7           155     None                                                                                                                                                                                                                   
## 8            60     None                                                                                                                                                                                                                   
## 9            70     9100                                                                                                                                                                                                                   
## 10         None     None                                                                                                                                                                                                                   
## 11           55     7642                                                                                                                                                                                                                   
## 12         None    28698                                                                                                                                                                                                                   

ames.data <- as.data.frame(lapply(ames.data, function(x) {
  x <- as.character(x)
  x[x == "None"] <- 0
  as.numeric(x)
}))
##    Lot.Frontage Lot.Area                                                                                                                                                                                                                   
## 1            34     3901                                                                                                                                                                                                                   
## 2            70        0                                                                                                                                                                                                                   
## 3            60        0                                                                                                                                                                                                                   
## 4            64     7018                                                                                                                                                                                                                   
## 5           111    16259                                                                                                                                                                                                                   
## 6            50     4280                                                                                                                                                                                                                   
## 7           155        0                                                                                                                                                                                                                   
## 8            60        0                                                                                                                                                                                                                   
## 9            70     9100                                                                                                                                                                                                                   
## 10            0        0                                                                                                                                                                                                                   
## 11           55     7642                                                                                                                                                                                                                   
## 12            0    28698                                                                                                                                                                                                                   

sapply(ames.data, class)
## Lot.Frontage     Lot.Area                                                                                                                                                                                                                  
##    "numeric"    "numeric"     

答案 1 :(得分:1)

检查class(ames.data$Lot.Frontage)。我敢打赌这是一个因素。这意味着您只能用levels(ames.data$Lot.Frontage)中的其他值替换值。

您可以通过几种方式执行此操作,但它们都归结为将列转换为您可以更改的类型。在这种情况下,首先转换为字符,然后更改&#34;无&#34;到&#34; 0&#34;,然后转换为数字。

ames.data$Lot.Frontage <- as.character(ames.data$Lot.Frontage)
ames.data$Lot.Frontage[ames.data$Lot.Frontage == "None"] <- "0"
ames.data$Lot.Frontage <- as.numeric(ames.data$Lot.Frontage)

如果直接转换为数字,&#34;无&#34; s将变为NA s。由于您可能有其他缺失数据,因此&#34;无&#34;以及其他丢失的数据将会混淆。

答案 2 :(得分:0)

如果您阅读指定na.strings="None"colClasses=c("numeric","numeric")的数据,则可以替换&#34;无&#34;通常为0

read.table("file", header=T, quote="\"",colClasses=c("numeric","numeric"),na.strings="None")
df[is.na(df)]<-0