【问题标题】:Calculating the means with NAs用 NA 计算均值
【发布时间】:2021-09-05 10:46:39
【问题描述】:

我想计算以下数据框的平均值。由于NA's,,我收到以下消息:警告消息:在 mean.default(df_new) 中:参数不是数字或逻辑:返回 NA。有没有办法绕过这个错误?

数据结构:

愿望输出规则=AVERAGE(B2:P7)

样本数据:

structure(list(X1 = c(1, 2, 3, 4, 5, 6), `10` = c(10, 10, 10, 
10, NA, NA), `20` = c(20, 20, 20, NA, NA, NA), `30` = c(30, 30, 
30, 30, NA, NA), `40` = c(40, 40, 40, 40, NA, NA), `50` = c(50, 
50, 50, 50, 50, 50), `60` = c(60, 60, NA, NA, NA, NA), `70` = c(70, 
70, NA, NA, NA, NA), `80` = c(80, 80, NA, NA, NA, NA), `90` = c(90, 
90, NA, NA, NA, NA), `100` = c(NA, NA, NA, NA, NA, NA), `110` = c(110, 
110, 110, NA, NA, NA), `120` = c(120, 120, NA, NA, NA, NA), `130` = c(NA, 
NA, NA, NA, NA, NA), `140` = c(NA, NA, NA, NA, NA, NA), `150` = c(150, 
NA, NA, NA, NA, NA), X17 = c(NA, NA, NA, NA, "average", "57.14285714"
)), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-6L), spec = structure(list(cols = list(X1 = structure(list(), class = c("collector_double", 
"collector")), `10` = structure(list(), class = c("collector_double", 
"collector")), `20` = structure(list(), class = c("collector_double", 
"collector")), `30` = structure(list(), class = c("collector_double", 
"collector")), `40` = structure(list(), class = c("collector_double", 
"collector")), `50` = structure(list(), class = c("collector_double", 
"collector")), `60` = structure(list(), class = c("collector_double", 
"collector")), `70` = structure(list(), class = c("collector_double", 
"collector")), `80` = structure(list(), class = c("collector_double", 
"collector")), `90` = structure(list(), class = c("collector_double", 
"collector")), `100` = structure(list(), class = c("collector_logical", 
"collector")), `110` = structure(list(), class = c("collector_double", 
"collector")), `120` = structure(list(), class = c("collector_double", 
"collector")), `130` = structure(list(), class = c("collector_logical", 
"collector")), `140` = structure(list(), class = c("collector_logical", 
"collector")), `150` = structure(list(), class = c("collector_double", 
"collector")), X17 = structure(list(), class = c("collector_character", 
"collector"))), default = structure(list(), class = c("collector_guess", 
"collector")), skip = 1L), class = "col_spec"))

【问题讨论】:

  • mean() 函数有一个参数可以忽略 NA——即mean(x, na.rm=TRUE)。运行?mean查找参数选项。
  • 你能告诉我们你是如何编写你的平均函数的吗?
  • 查看@akrun 的回答。您的df_new 中还有一些不是数字的列(即c(`100`,`130`,`140`,`150`,X17))。您可能需要先删除它们,否则您的平均值可能没有意义。

标签: r dataframe


【解决方案1】:

我们可能需要rowMeans

rowMeans(df_new[grep("^\\d+$", names(df_new))], na.rm = TRUE)

或者如果是针对整个数据集,unlist data.frame 通过仅选择感兴趣的列来创建向量

mean(unlist(df_new[grep("^\\d+$", names(df_new))]), na.rm = TRUE)
[1] 57.14286

或者以整齐的方式

library(dplyr)
df_new %>% 
    select(matches('^\\d+$')) %>% 
    as.matrix %>% 
    mean(na.rm = TRUE)
#[1] 57.14286

【讨论】:

    猜你喜欢
    • 2013-12-28
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 2015-09-12
    • 2015-11-19
    • 2022-01-12
    • 2021-07-03
    • 2020-03-27
    相关资源
    最近更新 更多