参数不是数字或逻辑:返回带有一个字符串列的NA

时间:2019-10-23 18:22:49

标签: r

您好,我想为数据中的每个数字列计算均值。现在,我有:

for(i in names(MyData)){
  avg <- mean(MyData[[i]], na.rm = TRUE)
  print(avg)
}

但是我得到类似主题名称的错误,因为MyData的最后一个是决定性的,我在这里有字符串,有没有办法忽略带有字符串的列。我也知道我可以将其更改为数字,但是我不想这样做。

1 个答案:

答案 0 :(得分:0)

如果我们使用summarise_if中的dplyr

,我们可以更轻松地做到这一点
library(dplyr)
MyData %>%
     summarise_if(is.numeric, mean)

在OP的代码中,它循环遍历各列,仅print插入结果而不存储它。还有可能某些列不是numeric。在下面的代码中,我们为vector('v1')预先分配了0个值来存储输出。使用if/else创建逻辑条件,如果是meannumeric则返回else返回NA

v1 <- numeric(length(MyData))
for(i in seq_along(MyData)) {
    if(is.numeric(MyData[[i]])) {
        v1[i] <- mean(MyData[[i]], na.rm = TRUE)
    } else {
        v1[i] <- NA_real_
     }
  }

base R中,也可以使用sapply

i1 <- sapply(MyData, is.numeric)
sapply(MyData[i1], mean, na.rm = TRUE)

或与colMeans

colMeans(MyData[i], na.rm = TRUE)