计算R中每行的平均时间

mznpcxlj  于 2023-09-27  发布在  其他
关注(0)|答案(2)|浏览(135)

在下面的示例框架中,我只想计算每行的平均时间,并将小时和分钟分开

# Input vectors
a <- c('03:10', '03:10', '03:20')
b <- c('03:20', '03:20', '03:40')
c <- c('A', 'B', 'C')

# Create the data frame
df <- data.frame(a, b, c)`

# ouput
# Input vectors
a <- c(NA, '03:10', '03:20')
b <- c(NA, '03:20', '03:40')
c <- c('A', 'B', 'C')
d <- c(NA, 3, 3)
e <- c(NA, 15, 30)

# Create the data frame
df <- data.frame(a, b, c, d, e)
kr98yfug

kr98yfug1#

您可以使用str_replace()将小时和分钟值提取到它们自己的变量中,然后取小时和分钟变量的平均值。

a <- c('03:10', '03:10', '03:20')
b <- c('03:20', '03:20', '03:40')
c <- c('A', 'B', 'C')

# Create the data frame
df <- data.frame(a, b, c)
library(dplyr)
library(stringr)
df %>% 
  mutate(hrs_a = as.numeric(str_replace(a, '(\\d+):\\d+', "\\1")), 
         hrs_b = as.numeric(str_replace(b, '(\\d+):\\d+', "\\1")), 
         mins_a = as.numeric(str_replace(a, '\\d+:(\\d+)', "\\1")), 
         mins_b = as.numeric(str_replace(b, '\\d+:(\\d+)', "\\1")), 
         d = rowMeans(pick(starts_with("hrs"))), 
         e = rowMeans(pick(starts_with("mins")))) %>% 
  select(a,b,c,d,e)
#>       a     b c d  e
#> 1 03:10 03:20 A 3 15
#> 2 03:10 03:20 B 3 15
#> 3 03:20 03:40 C 3 30

创建于2023-09-22使用reprex v2.0.2

sshcrbum

sshcrbum2#

可以使用这种方法计算平均值。

cbind(df, 
      lapply(df[1:2], strsplit, ':') |> rapply(as.numeric) |>
        matrix(ncol=2L) |> rowMeans() |> matrix(ncol=2, byrow=TRUE) |>
        `colnames<-`(c('d', 'e'))
)
#       a     b c d  e
# 1 03:10 03:20 A 3 15
# 2 03:10 03:20 B 3 15
# 3 03:20 03:40 C 3 30

rowMeans秒,然后子集POSIXlt

cbind(df,
      sapply(df[1:2], \(x) as.numeric(as.POSIXlt(sprintf('%s %s:00', Sys.Date(), x)))) |>
        rowMeans() |> as.POSIXlt() |> sapply(\(.) cbind(.$hour, .$min)) |> t() |>
        `colnames<-`(c('d', 'e'))
)
#       a     b c d  e
# 1 03:10 03:20 A 3 15
# 2 03:10 03:20 B 3 15
# 3 03:20 03:40 C 3 30
  • 数据:*
df <- structure(list(a = c("03:10", "03:10", "03:20"), b = c("03:20", 
"03:20", "03:40"), c = c("A", "B", "C")), class = "data.frame", row.names = c(NA, 
-3L))

相关问题