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

}