【问题标题】:I need to find the mean for the data with cells without values我需要找到没有值的单元格的数据的平均值
【发布时间】:2019-10-28 03:45:16
【问题描述】:

我需要找出所有不同周的平均价格。我需要制作一个 ggplot 来显示一年中的价格。 当你找到平均值时,空单元格如何影响平均值?

我尝试了几件事,包括使用 melt() 函数,所以我只有 3 个变量。变量是我想要求均值的因素。

Company variable value
ns  Price week 24   1749
ns  Price week 24    
ns  Price week 24   1599
ns  Price week 24    
ns  Price week 24    
ns  Price week 24   359
ns  Price week 24   460

我有超过 30 万个 obs,并且希望有一个小的 data.frame,其中我只有公司,不同周的价格作为平均值。现在我每周都有所有观察结果,我需要使用平均值来使用 GGplot。

当我使用以下代码时

dat %in% mutate(means=mean(value), na.rm=TRUE)

我收到一条警告消息,指出参数不是数字或逻辑:返回 NA。

期待您的帮助!

【问题讨论】:

  • 您好,欢迎您。你能明确什么是旅游 3 变量吗?我知道“公司”=“ns 价格周”、“变量”= 24 和“价值”= 1749(第一行)。这是正确的吗?此外,在具有空单元格的列/向量上应用均值应该忽略空单元格。
  • 我认为您收到错误是因为您将 na.rm = TRUE 参数提供给 mutate 函数,而不是 mean:尝试将最后一行代码替换为 mutate(means=mean(value, na.rm=TRUE))
  • 嗨,谢谢。这里对变量进行了进一步解释:公司当然是它是哪家公司,其中价格周是给定房屋在给定周的价格。外汇。 ns 公司在第 24 周的第一套房子的价格是 1749。因此价值就是价格。我已尝试更改最后一行代码,但仍然无法正常工作。

标签: r mean factors


【解决方案1】:

PavoDive 评论中的清洁代码

dt[!is.na(value), mean(value), by = .(price, week)]

甚至更好

dt[ , mean(value, na.rm = TRUE), by = .(price, week)] 

原文: 这使用data.table 有效。第一部分过滤掉没有数值的行。接下来是说我们想要值列的平均值。 final by 定义了如何对行进行分组。

代码:

dt[value >0 | value<1, .(MeanValues = mean(`value`)), by = c("Price", "Week")][]

输入:

dt <- data.table(`Price` = c("A","B","B","A","A","B","B","A"),
                  `Week`= c(1,2,1,1,2,2,1,2),
                  `value` = c(3,7,2,NA,1,46,1,NA))

   Price Week value
1:     A    1     3
2:     B    2     7
3:     B    1     2
4:     A    1    NA
5:     A    2     1
6:     B    2    46
7:     B    1     1
8:     A    2    NA

输出:

1:     A    1        3.0
2:     B    2       26.5
3:     B    1        1.5
4:     A    2        1.0

【讨论】:

  • dt[!is.na(value), mean(value), by = .(price, week)] 甚至更好的dt[ , mean(value, na.rm = TRUE), by = .(price, week)] 会不那么惯用。您可以摆脱所有这些单引号和双引号。另外:你不需要最后的[],因为结果会自动打印(当你用:=进行分配时需要它)
  • 谢谢 PavoDive。我之前想不到那些 na 命令。这是一个很好的清理。 [] 是故意的,所以它会打印出来,但我可以看到它是如何不清楚的。
  • 别担心!我赞扬你来到这里帮助他人(并在此过程中学习)。干得好!
  • 嗨 PavoDive 和 Korinda。感谢您的回答,但我仍然无法让它工作。我是否需要使用 data.table 才能工作,还是我的列需要特定的东西?公司和变量都是价值所在的因素
  • wd% group_by(variable, Company) %>% summarise_all(Avereage =mean(value), na.rm=TRUE) 如果我使用该代码,我将每周获得第一家公司(ns),但我每周都没有任何价值。它只是说 NA.. 警告是:参数不是数字或逻辑:返回 NA.. 你们中的任何人都知道为什么以及为什么其他公司没有出现吗?我希望每家公司都有每周的平均价格.. 之后我需要绘制它
猜你喜欢
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多