R 如何在不接收无效字符错误的情况下聚合字符和数值

R 如何在不接收无效字符错误的情况下聚合字符和数值,r,dataframe,ggplot2,tidyr,mutate,R,Dataframe,Ggplot2,Tidyr,Mutate,我想绘制以下数据: structure(list(`Sunday NightShifts` = c(2, 3, 3, 3, 3), time = c("t0400_0415_d1", "t0415_0430_d1", "t0430_0445_d1", "t0445_0500_d1", "t0500_0515_d1"), day = c("Sunday", "Sunday", "Sunday", "Sunday", "Sunday"),

我想绘制以下数据:

structure(list(`Sunday NightShifts` = c(2, 3, 3, 3, 3), 
               time = c("t0400_0415_d1", "t0415_0430_d1", "t0430_0445_d1", "t0445_0500_d1", "t0500_0515_d1"),
               day = c("Sunday", "Sunday", "Sunday", "Sunday", "Sunday"), 
              `Monday NightShifts` = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), 
              `Tuesday NightShifts` = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), 
              `Wednesday NightShifts` = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), 
              `Thursday NightShifts` = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), 
              `Friday NightShifts` = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_)), 
              row.names = c(NA, 5L), class = "data.frame")
使用tidyverse绘图,我的代码如下:

df <- as_data_frame(NightShifts) %>% 
  mutate(timeofday = rownames(NightShifts)) %>% 
mutate(timeofday = as.POSIXct(paste0("2000-01-01 ", timeofday, ":00")))


df_long <- df %>% 
            gather("activity", "value", -timeofday) %>% 
            group_by(timeofday) %>% 
       mutate(rel_value = value / sum(value))
我运行了一个回溯():

你能帮我解决这个错误吗

我还有一个基本问题,就是如何更改此代码

as.POSIXct(paste0("2000-01-01 ", timeofday, ":00")))
以小时和分钟(无日期)显示从04:00开始到03:45结束的时间


非常感谢

如果我们需要以分钟为单位的单位差异,请使用
提取(
tidyr
)将“时间”列拆分为两个(“时间1”、“时间2”),转换为Datetime类(
as.POSIXct
)获取列之间的差异,并添加“周日夜班”列

library(tidyverse)
NightShifts %>% 
   extract(time, into = c("time1", "time2"), 
         "^t(\\d+)_(\\d+)_.*", remove = FALSE) %>%
   mutate_at(vars(time1, time2), as.POSIXct, format = "%H%M") %>% 
   mutate(Diff = as.numeric(difftime(time2, time1, unit = "min") + 
            `Sunday NightShifts`))

不,这不是因为
NA
s。当您执行
2+“t0400\u 0415\u d1”
时,您希望得到什么样的答案?@Ronaksah谢谢,所以基本上我需要将t0400\u 0415\u d1转换为数字?感谢您的帮助和时间-好主意-当我运行代码时,我在
[.data.frame
(,time,into=c(“time1”,“time2”),“^t(\\d+)\ud+”中收到以下错误,:未使用的参数(into=c(“time1”,“time2”),remove=FALSE)@user10974052我猜您使用的是
tidyr::extract
,如果它被另一个同名函数屏蔽(来自
magrittr
),请明确指定
夜班%>%tidyr::extract(time,into=
as.POSIXct(paste0("2000-01-01 ", timeofday, ":00")))
library(tidyverse)
NightShifts %>% 
   extract(time, into = c("time1", "time2"), 
         "^t(\\d+)_(\\d+)_.*", remove = FALSE) %>%
   mutate_at(vars(time1, time2), as.POSIXct, format = "%H%M") %>% 
   mutate(Diff = as.numeric(difftime(time2, time1, unit = "min") + 
            `Sunday NightShifts`))