【问题标题】:Keep getting object of type 'closure' is not subsettable when I separate date and time当我分隔日期和时间时,继续获取“闭包”类型的对象不是子集
【发布时间】:2021-12-19 03:11:21
【问题描述】:

我是 R 新手。 我正在尝试将日期/时间分成不同的列。

列中的格式是 4/12/2016 12:00:00 AM

original format of the column

我已经尝试了几种方法,但没有任何效果。有人可以解释我哪里出错了以及如何解决它吗?

我的第一次尝试:

sdo<- sleepday %>% separate(SleepDay,c("Date","Time"),sep=" ") %>% format (as.POSIXct(data$all),format = "%H:%M:%S")

我的第二次尝试:

当我尝试仅使用以下内容时,我没有得到完整的日期和时间。结果只是按月份分开,我假设是分钟数:

sdo<- sleepday %>% separate(SleepDay,c("Date","Time")

the results using code chunk above

然后我在几个网站上阅读了它并尝试了以下代码块并再次收到此消息:

Error in data$SleepDay : object of type 'closure' is not subsettable
> 


dt_sleep <- sleepday %>% format (as.POSIXct(data$SleepDay),format = "%H:%M:%S")


    

> 
> 
> dput(head(sleepday))
structure(list(Id = c(1503960366, 1503960366, 1503960366, 1503960366, 
1503960366, 1503960366), SleepDay = c("4/12/2016 12:00:00 AM", 
"4/13/2016 12:00:00 AM", "4/15/2016 12:00:00 AM", "4/16/2016 12:00:00 AM", 
"4/17/2016 12:00:00 AM", "4/19/2016 12:00:00 AM"), TotalSleepRecords = c(1, 
2, 1, 2, 1, 1), TotalMinutesAsleep = c(327, 384, 412, 340, 700, 
304), TotalTimeInBed = c(346, 407, 442, 367, 712, 320)), row.names = c(NA, 
-6L), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"), spec = structure(list(
    cols = list(Id = structure(list(), class = c("collector_double", 
    "collector")), SleepDay = structure(list(), class = c("collector_character", 
    "collector")), TotalSleepRecords = structure(list(), class = c("collector_double", 
    "collector")), TotalMinutesAsleep = structure(list(), class = c("collector_double", 
    "collector")), TotalTimeInBed = structure(list(), class = c("collector_double", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), delim = ","), class = "col_spec"), problems = <pointer: (nil)>)
> 

【问题讨论】:

  • 请包含生成数据(或类似数据)的代码,而不是屏幕截图。当您在屏幕上显示 SleepDay 是字符数据还是日期时间数据时,它是模棱两可的,这些情况会导致不同的建议。请在您的问题正文中包含dput(sleepday) 的输出,或者如果太长,请在dput(head(sleepday)) 中包含。
  • @JonSpring 我不确定如何在此站点上添加或生成数据,但我确实添加了您要求的 dput(head(sleepday))。小写的 sleepday 是数据框,大写的 SleepDay 是数据框中包含需要分隔的日期/时间的列。
  • 您最初尝试的第一部分:sleepday %&gt;% separate(SleepDay,c("Date","Time"),sep=" ") 工作得很好。我不确定你想用format 位做什么——你没有一个名为all 的变量或一个名为data 的数据集。我怀疑你想做sleepday %&gt;% separate(SleepDay,c("Date","Time"),sep=" ") %&gt;% mutate(out = format(Time, format="%H:%M:%S")) 之类的事情,但要小心你丢失了 AM/PM 位。
  • 顺便说一句,在 sep=" " 之后添加 extra = "merge" 将使 AM/PM 位保留在您的时间列中。
  • 非常感谢你们,我知道这不是一门课,但我只是想了解这部分工作的原因@thelatemail mutate(out = format(Time, format="%H:% M:%S")) 你能帮我分解一下吗?不幸的是,这就是我的学习方式。如果您愿意,请提前感谢伙计们,如果没有,也可以。

标签: r dplyr error-code


【解决方案1】:

您可能会获得成功:

dt_sleep <- sleepday %>% mutate(SleepDay = as.POSIXct(SleepDay,
                               format = "%m/%d/%Y %I:%M:%S %p"))
   # now a date-time  (edit: now correctly deals with am/pm
   # and original guess was missing a closing parenthesis
dt_sleep$s_Date <- as.Date(dt_sleep$SleepDay ) #Date-classed column
dt_sleep$s_Time <- format(dt_sleep$SleepDay, "%I:%M:%S %p")  #character value


dt_sleep
# A tibble: 6 × 7
          Id SleepDay            TotalSleepRecords TotalMinutesAsleep TotalTimeInBed s_Date     s_Time     
       <dbl> <dttm>                          <dbl>              <dbl>          <dbl> <date>     <chr>      
1 1503960366 2016-04-12 00:00:00                 1                327            346 2016-04-12 12:00:00 AM
2 1503960366 2016-04-13 00:00:00                 2                384            407 2016-04-13 12:00:00 AM
3 1503960366 2016-04-15 00:00:00                 1                412            442 2016-04-15 12:00:00 AM
4 1503960366 2016-04-16 00:00:00                 2                340            367 2016-04-16 12:00:00 AM
5 1503960366 2016-04-17 00:00:00                 1                700            712 2016-04-17 12:00:00 AM
6 1503960366 2016-04-19 00:00:00                 1                304            320 2016-04-19 12:00:00 AM

我找不到将“日期”和“时间”作为参数的separate 函数。可能有一个,但我确实加载了 tidyverse。 tidyr::separate 函数表示它使用正则表达式模式。您可能可以将一对正则表达式模式放在一起来分隔“MM/DD/YYYY H:M:S A/P”格式的字符值,但为什么不学习使用经过实际测试的代码来管理日期时间数据呢?

【讨论】:

  • 好的,我明白了。会做!再次感谢!感谢您的时间。
猜你喜欢
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多