代码之家  ›  专栏  ›  技术社区  ›  Jack Armstrong

R中的平均问题

  •  -2
  • Jack Armstrong  · 技术社区  · 6 年前

    我在一个数据框中有一个列,我正在试图找到平均值。我用过:

    mean(dat$Age, na.rm=TRUE)
    

    得到一个数值或逻辑运算符错误的错误。意识到存在一个非数值,我使用以下方法修复了它:

    dat[10, 2] #- value in Age column on row 10
    

    我又试了一次,还是发现了数字错误。

    编辑:我需要将函数定义为一个新变量。

    3 回复  |  直到 6 年前
        1
  •  2
  •   akrun    6 年前

    通过对一个值进行赋值,它只会替换与其对应的值。但是,它不会更改列类型。我们需要

    dat$Age <- as.numeric(dat$Age)
    

    如前所述,通过 as.numeric(dat$Age) 直接在包含非数字元素的列上,将出现一个填充 NA 对于非数字元素,可以用 is.na

    i1 <- is.na(dat$Age)
    

    另一种没有警告地标识非数值行的方法是 grepl 是的。使用模式匹配负片( - )或其他数字,包括从开始算起的十进制数( ^ )结束( $ )会覆盖大多数情况。

    i1 <- !grepl("^-?[0-9.]+$", dat$Age)
    
    mean(dat$Age, na.rm = TRUE)
    
        2
  •  2
  •   Tim Biegeleisen    6 年前

    在取平均值之前,可以尝试将输入向量转换为数值。这将导致分配非数值 NA ,然后您可以在呼叫 mean 使用 na.rm=TRUE :

    x <- c(1, 'Hello', 3)
    mean(as.numeric(x), na.rm=TRUE)
    
    [1] 2
    

    这将生成一条警告消息,但至少它将运行。

    一般来说,最好不要在同一矢量、列等中混合使用数值和非数值数据。

        3
  •  0
  •   MSW Data    6 年前

    这个怎么样?

      x = c(1,2,3,"xxx");
      grepl("[[:digit:]]", x)