R循环遍历特定列并比较值

时间:2018-03-05 21:36:04

标签: r loops na

从csv加载后,我的数据集中有空白/空值。

我发现我可以这样做:

data$col[data$col==""] <- "NA"
data$col <- as.factor(data$col)

将它们更改为NA,但我有近200列,所以它不是最好的方法。 我尝试了一个带有所有类型索引的for循环,但它并没有真正起作用。我错过了什么?除非用NA&#39>多次覆盖我的数据

for (i in 1:189) {
  if (class(data[[i]]) == "character") {
    data[data[[i]] == "", ] <- "NA"
  }

3 个答案:

答案 0 :(得分:0)

如果您想将数据框中的所有空字符串("")转换为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>

答案 1 :(得分:0)

试试这个:     我生成了一个例子:

  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

答案 2 :(得分:0)

您可以使用属性na.strings:

读取数据
read.csv("data2.csv", header=T, na.strings=c("","NA"))

Already a stackoverflow article about this

或使用你的逻辑:

for (i in seq(1,length(colnames(data)))){
  data[,i] <- as.character(data[,i])
  data[,i][data[,i] == ""]<-NA

}