所以我的数据中没有穿插在数字向量中的数据,比如这个 -
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?
答案 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