如何进行多个操作来对 R 中不同数据集的值求和(包括时间格式)
How to make more than one operation to sum values from different datasets in R (including time format)
我有一个工具,我可以 运行 计算某些程序的 运行ning 次,多次给出相同的 1 行 table 和结果数字 ( 6 列,header 带有列名)。我正在为三个程序执行此操作,我必须 sum/combine 结果就好像它是一个程序,而不是三个。 (比如程序1用1小时到运行,程序2用1小时,程序3用3小时,那么结果加起来就是5小时)。
5 来自此类输出的值 tables 看起来像“304.34”(十进制数,通常以百为单位,必须求和),但其中一列有以下时间格式:01:04:56。我想制作一个 R 脚本,它接受 3 tables(对于提到的三个程序),并将其相加产生一个 table。 (同header)
问题是,我很难想出一个函数可以做到这一点并正确地对时间列和其他列求和。谢谢!
**示例:
df <- read.table(text = "col1 col2 col3 col4 col5 col6_time
300.45 201.4 100.11 100.35 101 01:10:05
300 202.1 105.20 101.10 100 01:00:01
250.10 200.4 101.21 102 100 00:45:23", header = T)
**desired output (sum values, keep header):**
col1 col2 col3 col4 col5 col6_time
1 850.55 603.9 306.52 303.45 301 02:55:28
您可以将字符列转换为句点对象并对其求和。
library(dplyr)
library(lubridate)
df %>%
summarise(across(where(is.numeric), sum),
across(where(is.character),
~format(parse_date_time(seconds_to_period(sum(period_to_seconds(hms(.)))), "HMS"), '%T')))
# col1 col2 col3 col4 col5 col6_time
#1 850.55 603.9 306.52 303.45 301 02:55:29
我有一个工具,我可以 运行 计算某些程序的 运行ning 次,多次给出相同的 1 行 table 和结果数字 ( 6 列,header 带有列名)。我正在为三个程序执行此操作,我必须 sum/combine 结果就好像它是一个程序,而不是三个。 (比如程序1用1小时到运行,程序2用1小时,程序3用3小时,那么结果加起来就是5小时)。
5 来自此类输出的值 tables 看起来像“304.34”(十进制数,通常以百为单位,必须求和),但其中一列有以下时间格式:01:04:56。我想制作一个 R 脚本,它接受 3 tables(对于提到的三个程序),并将其相加产生一个 table。 (同header)
问题是,我很难想出一个函数可以做到这一点并正确地对时间列和其他列求和。谢谢!
**示例:
df <- read.table(text = "col1 col2 col3 col4 col5 col6_time
300.45 201.4 100.11 100.35 101 01:10:05
300 202.1 105.20 101.10 100 01:00:01
250.10 200.4 101.21 102 100 00:45:23", header = T)
**desired output (sum values, keep header):**
col1 col2 col3 col4 col5 col6_time
1 850.55 603.9 306.52 303.45 301 02:55:28
您可以将字符列转换为句点对象并对其求和。
library(dplyr)
library(lubridate)
df %>%
summarise(across(where(is.numeric), sum),
across(where(is.character),
~format(parse_date_time(seconds_to_period(sum(period_to_seconds(hms(.)))), "HMS"), '%T')))
# col1 col2 col3 col4 col5 col6_time
#1 850.55 603.9 306.52 303.45 301 02:55:29