【问题标题】:r: Error in mutate_impl(.data, dots) : Evaluation error: object '72L' not foundr:mutate_impl(.data,dots)中的错误:评估错误:找不到对象'72L'
【发布时间】:2018-04-02 03:46:33
【问题描述】:

我正在尝试为我在 r 中的单变量时间序列数据运行 frame_calendar。当我尝试计算数据框的日历布局时,出现以下错误。

mutate_impl(.data, dots) 中的错误: 评估错误:找不到对象“72L”。

从类似的线程中,我看到了评估错误:未找到对象“”通常是针对用户在代码中输入的对象。但是,就我而言,我并没有在我的代码中指代任何“72L”。它也不在我的数据集中。你能帮我弄清楚如何解决这个错误吗?非常感谢任何帮助。

这是我的一部分数据。

Date_Time   Time    Date    Year    Month   Mdate   Day Hours_Time  Hourly_Counts
1/1/2015 0:00   0:00:00 2015-01-01  2015    January 1   Thursday    1   72
1/1/2015 1:00   1:00:00 2015-01-01  2015    January 1   Thursday    2   48
1/1/2015 2:00   2:00:00 2015-01-01  2015    January 1   Thursday    3   53
1/1/2015 3:00   3:00:00 2015-01-01  2015    January 1   Thursday    4   84
1/1/2015 4:00   4:00:00 2015-01-01  2015    January 1   Thursday    5   68

这是我的代码。

newdata <- read.csv("D:/NEWDATA.csv")
attach(newdata)
View(newdata)

newdata[,3] <- as.Date(Date, origin = "1/1/2000")
attach(newdata)
View(newdata)


library(dplyr)
# compute the calendar layout for the data frame
calendar_df <- newdata %>%
  filter(Year == 2015) %>%
  frame_calendar(x = Time, y = Hourly_Counts, date = Date)

【问题讨论】:

  • frame_calendar 来自suggrants?还有两个旁注:1)不要attach()您的数据框,特别是如果您要使用tidyverse函数(使用非标准评估)。 2)您的数据中确实有72L。是整数72,是newdata$Hourly_Counts中的第一个值
  • 是的,那么如果你使用基本方法进行变异,你必须将其包装在 with() 中或显式提取它们(例如,newdata$Date)
  • @DanHall 是的,frame_calendar 来自 suggrants 包。如果按照您的建议,在读取数据后第一次没有attach() 数据帧,那么我会收到错误:> as.Date(Date, origin = "1/1/2000") 中的错误:对象'找不到日期。但是,如果我第一次attach() 并省略了第二次attach(),我仍然会得到 > mutate_impl(.data, dots) 中的错误:评估错误:找不到对象 '72L'。另外,我可以在整数72 中看到您的观点,我只是不明白为什么日历布局正在搜索特定的数据值。如果这是太基本的问题,我深表歉意。
  • @DanHall 这里是我的代码的编辑版本。我尝试将tibble() 作为将Date 转换为Date Class 的替代方法。 newpm10 &lt;- read.csv("D:/NEWDATA.csv") View(newdata) newdata &lt;- as_tibble(newdata) newdate &lt;- as.Date(Date, origin = "1/1/2000") View(newdate) newdata &lt;- mutate(newdata, Date = newdate) View(newdata) library(dplyr) # compute the calendar layout for the data frame calendar_df &lt;- newdata %&gt;% filter(Year == 2015) %&gt;% frame_calendar(x = Time, y = Hourly_Counts, date = Date) 但是它仍然给出同样的错误。感谢您的帮助。
  • 问题的主要来源是您使用了attach,它在对frame_calendar 的调用中掩盖了Hourly_Counts。请参阅下面的答案。要运行它,请确保从干净的环境开始。您已经多次运行attach(),这意味着您每次都必须运行detach。

标签: r dplyr


【解决方案1】:

这里的主要问题是,当您首先attach() 数据框时,您会屏蔽许多您需要的对象。一般不要使用attach。如果您想使用附加的数据集,请在对with 的调用中使用它,当然不要将它与dplyr 或其他tidyverse 函数结合使用。

使用干净的环境(没有附加数据或命名空间),始终使用dplyr 方法,就像这样。除了不附加之外,请注意代码的另外两个更改。 (1) 使用mutate 在dplyr 管道内设置Date 列。 (2) x = Hours_Time,而不是Time。如果您之前运行过attach(new_data),请先运行detach(new_data),直到您拥有一个干净的环境。 如果您多次运行它,您将不得不多次detach。

library(dplyr)
library(sugrrants)
new_data %>%
  mutate(Date = as.Date(Date, origin = "1/1/2000")) %>%
  frame_calendar(x = Hours_Time, y = Hourly_Counts, date = Date)
#       Date_Time    Time Year   Month Mdate      Day Hours_Time Hourly_Counts       Date
# 1 1/1/2015 0:00 0:00:00 2015 January     1 Thursday          1            72 2015-01-01
# 2 1/1/2015 1:00 1:00:00 2015 January     1 Thursday          2            48 2015-01-01
# 3 1/1/2015 2:00 2:00:00 2015 January     1 Thursday          3            53 2015-01-01
# 4 1/1/2015 3:00 3:00:00 2015 January     1 Thursday          4            84 2015-01-01
# 5 1/1/2015 4:00 4:00:00 2015 January     1 Thursday          5            68 2015-01-01
#   .Hours_Time .Hourly_Counts
# 1    1.454167      0.6833333
# 2    1.691667      0.0500000
# 3    1.929167      0.1819444
# 4    2.166667      1.0000000
# 5    2.404167      0.5777778

数据:

new_data <- read.table(text = "Date_Time   Time    Date    Year    Month   Mdate   Day Hours_Time  Hourly_Counts
'1/1/2015 0:00'   0:00:00 2015-01-01  2015    January 1   Thursday    1   72
                       '1/1/2015 1:00'   1:00:00 2015-01-01  2015    January 1   Thursday    2   48
                       '1/1/2015 2:00'   2:00:00 2015-01-01  2015    January 1   Thursday    3   53
                       '1/1/2015 3:00'   3:00:00 2015-01-01  2015    January 1   Thursday    4   84
                       '1/1/2015 4:00'   4:00:00 2015-01-01  2015    January 1   Thursday    5   68", header = TRUE, stringsAsFactors = FALSE)

【讨论】:

  • 感谢您的建议。会记住这一点。您的解决方案终于解决了问题。我认为除了attach() 之外的主要问题是我使用Time 作为x 值而不是Hours_Time,因为我之前曾多次运行detach(),但得到了同样的错误。 @丹霍尔
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-02
  • 1970-01-01
  • 2019-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多