R 从复杂日期格式识别周数

R 从复杂日期格式识别周数,r,datetime,format,R,Datetime,Format,对于数据框中的日期,我有一个非常烦人的格式。以下是一个示例: "Jan 1, 2020, 8:36:55 PM" "Jan 7, 2020, 12:00:00 PM" "Jan 9, 2020, 8:24:55 PM" 我要做的第一件事就是按年过滤。我最后只使用了grep(),因为没有出现2020的其他上下文,但这不是一个优雅的解决方案。我希望我目前问题的答案也能对此有所帮助 不管怎样,我现在想确定几周。我想每周计算不同列的每个单

对于数据框中的日期,我有一个非常烦人的格式。以下是一个示例:

"Jan 1, 2020, 8:36:55 PM"  "Jan 7, 2020, 12:00:00 PM" "Jan 9, 2020, 8:24:55 PM" 
我要做的第一件事就是按年过滤。我最后只使用了
grep()
,因为没有出现2020的其他上下文,但这不是一个优雅的解决方案。我希望我目前问题的答案也能对此有所帮助

不管怎样,我现在想确定几周。我想每周计算不同列的每个单元格的总和。然而,我甚至不知道如何将字符串转换成某种日期

给你一个我的数据样本,它是这样的(已经在2020年过滤):


编辑:我还需要在第三列中求和的行数,如果可能的话…

您可以使用
as.POSIXct

x <- c("Jan 1, 2020, 8:36:55 PM",  "Jan 7, 2020, 12:00:00 PM", "Jan 9, 2020, 8:24:55 PM")
as.POSIXct(x, format = '%b %d, %Y, %I:%M:%S %p', tz = 'UTC')
#[1] "2020-01-01 20:36:55 UTC" "2020-01-07 12:00:00 UTC" "2020-01-09 20:24:55 UTC"

一旦这样做,您就可以提取每周的信息和
sum
Moving.Time

library(dplyr)
library(lubridate)

df %>%
  mutate(Activity.Date = mdy_hms(Activity.Date)) %>%
  group_by(Week = week(Activity.Date )) %>%
  summarise(Moving.Time =  sum(Moving.Time))

您可以将
用作.POSIXct

x <- c("Jan 1, 2020, 8:36:55 PM",  "Jan 7, 2020, 12:00:00 PM", "Jan 9, 2020, 8:24:55 PM")
as.POSIXct(x, format = '%b %d, %Y, %I:%M:%S %p', tz = 'UTC')
#[1] "2020-01-01 20:36:55 UTC" "2020-01-07 12:00:00 UTC" "2020-01-09 20:24:55 UTC"

一旦这样做,您就可以提取每周的信息和
sum
Moving.Time

library(dplyr)
library(lubridate)

df %>%
  mutate(Activity.Date = mdy_hms(Activity.Date)) %>%
  group_by(Week = week(Activity.Date )) %>%
  summarise(Moving.Time =  sum(Moving.Time))

使用以下命令将activity.date列转换为日期/时间对象:

activitydate <-as.POSIXct("Jan 1, 2020, 8:36:55 PM", format="%b %d, %Y, %r")
有关更多信息,请参阅
strtime
的帮助

更新
要回答关于提供行数的第二个问题,可以使用dplyr库轻松完成

df$Activity.Date <- as.POSIXct(df$Activity.Date, format="%b %d, %Y, %r")
df$week <- format(df$Activity.Date, "%V")

library(dplyr)
df %>% group_by(week) %>% summarize(count=n(), sum=sum(Moving.Time))
df$Activity.Date%summary(count=n(),sum=sum(Moving.Time))

使用以下命令将activity.date列转换为日期/时间对象:

activitydate <-as.POSIXct("Jan 1, 2020, 8:36:55 PM", format="%b %d, %Y, %r")
有关更多信息,请参阅
strtime
的帮助

更新
要回答关于提供行数的第二个问题,可以使用dplyr库轻松完成

df$Activity.Date <- as.POSIXct(df$Activity.Date, format="%b %d, %Y, %r")
df$week <- format(df$Activity.Date, "%V")

library(dplyr)
df %>% group_by(week) %>% summarize(count=n(), sum=sum(Moving.Time))
df$Activity.Date%summary(count=n(),sum=sum(Moving.Time))

好的,谢谢。但是,有没有一种方法可以让我也添加一个列,其中包含多少行的总和?我以前没有意识到我需要它……你可以使用
n()
来计算每周的行数。将最后一行更改为
摘要(Moving.Time=sum(Moving.Time),count=n())
。好的,谢谢。但是,有没有一种方法可以让我也添加一个列,其中包含多少行的总和?我以前没有意识到我需要它……你可以使用
n()
来计算每周的行数。将最后一行更改为
摘要(Moving.Time=sum(Moving.Time),count=n())