R循环遍历特定列并比较值
R looping through specific columns and comparing values
从 csv 加载后,我的数据集中有 blank/empty 个值。
我发现我可以做到这一点:
data$col[data$col==""] <- "NA"
data$col <- as.factor(data$col)
将它们更改为 NA,但我有将近 200 列,所以这不是最好的方法。
我尝试了一个包含所有类型索引的 for 循环,但它并没有真正起作用。我错过了什么?除了用 NA
多次覆盖我的数据
for (i in 1:189) {
if (class(data[[i]]) == "character") {
data[data[[i]] == "", ] <- "NA"
}
如果您想将数据框中的所有空字符串 (""
) 无循环地转换为 NA
,请执行以下操作:
df[df==""] = NA
例如:
df = data.frame(id = 1:4,
name = c("John","Jill","","Jane"),
surname = c("Smith","","Peters",""))
> df
id name surname
1 1 John Smith
2 2 Jill
3 3 Peters
4 4 Jane
df[df==""] = NA
> df
id name surname
1 1 John Smith
2 2 Jill <NA>
3 3 <NA> Peters
4 4 Jane <NA>
试试这个:
我生成了一个例子:
test.df <- data.frame(x1=c(NA,2,3,NA),x2=c(1,2,3,4),x3=c(1,"" ,"" ,4))
test.df[test.df==""] <- NA
您可以读取属性为na.strings的数据:
read.csv("data2.csv", header=T, na.strings=c("","NA"))
Already a Whosebug article about this
或使用您的逻辑:
for (i in seq(1,length(colnames(data)))){
data[,i] <- as.character(data[,i])
data[,i][data[,i] == ""]<-NA
}
从 csv 加载后,我的数据集中有 blank/empty 个值。
我发现我可以做到这一点:
data$col[data$col==""] <- "NA"
data$col <- as.factor(data$col)
将它们更改为 NA,但我有将近 200 列,所以这不是最好的方法。 我尝试了一个包含所有类型索引的 for 循环,但它并没有真正起作用。我错过了什么?除了用 NA
多次覆盖我的数据for (i in 1:189) {
if (class(data[[i]]) == "character") {
data[data[[i]] == "", ] <- "NA"
}
如果您想将数据框中的所有空字符串 (""
) 无循环地转换为 NA
,请执行以下操作:
df[df==""] = NA
例如:
df = data.frame(id = 1:4,
name = c("John","Jill","","Jane"),
surname = c("Smith","","Peters",""))
> df
id name surname
1 1 John Smith
2 2 Jill
3 3 Peters
4 4 Jane
df[df==""] = NA
> df
id name surname
1 1 John Smith
2 2 Jill <NA>
3 3 <NA> Peters
4 4 Jane <NA>
试试这个: 我生成了一个例子:
test.df <- data.frame(x1=c(NA,2,3,NA),x2=c(1,2,3,4),x3=c(1,"" ,"" ,4))
test.df[test.df==""] <- NA
您可以读取属性为na.strings的数据:
read.csv("data2.csv", header=T, na.strings=c("","NA"))
Already a Whosebug article about this
或使用您的逻辑:
for (i in seq(1,length(colnames(data)))){
data[,i] <- as.character(data[,i])
data[,i][data[,i] == ""]<-NA
}