首页 文章

删除R中一列中包含非数字字符的行

提问于
浏览
12

在数据框中,列A应该是数字向量 .

因此,如果列的条目具有任何非数字字符,我将删除相应的整行 .

有没有人有办法解决吗?谢谢!

2 回答

  • 16

    将数据导入data.frame时,如果整个列不是数字,通常会将其转换为因子 . 考虑到这一点,您通常必须转换为字符然后转换为数字 .

    dat <- data.frame(A=c(letters[1:5],1:5))
    
    str(dat)
    'data.frame':   10 obs. of  1 variable:
     $ A: Factor w/ 10 levels "1","2","3","4",..: 6 7 8 9 10 1 2 3 4 5
    
    as.numeric(as.character(dat$A))
     [1] NA NA NA NA NA  1  2  3  4  5
    Warning message:
    NAs introduced by coercion
    

    请注意,它将字符转换为 NA . 结合这个:

    dat <- dat[!is.na(as.numeric(as.character(dat$A))),]
    

    换句话说, dat 的行在从因子转换为数字后不是 NA .

    第二期:

    > dat <- data.frame(A=c(letters[1:5],1:5))
    > dat <- dat[!is.na(as.numeric(as.character(dat$A))),]
    Warning message:
    In `[.data.frame`(dat, !is.na(as.numeric(as.character(dat$A))),  :
      NAs introduced by coercion
    > dat <- dat[!is.na(as.numeric(as.character(dat$A))),]
    Error in dat$A : $ operator is invalid for atomic vectors
    
  • 2

    或者使用@Brandon Bertelsen的示例数据

    dat1 <- transform(dat[grep("^\\d+$", dat$A),,drop=F], A= as.numeric(as.character(A)))
    dat1
    #   A
    #6  1
    #7  2
    #8  3
    #9  4
    #10 5
    
     str(dat1)
    #'data.frame':  5 obs. of  1 variable:
    #$ A: num  1 2 3 4 5
    

相关问题