我有一个这样的数据框,
Time ColA Colb
123 A B
我想将其转换为这样的数据框,
Hours Minutes ColA Colb
0 2 A B
时间列中的值以秒的形式出现。如何将其转换为小时和分钟?
答案 0 :(得分:3)
我使用以下R代码重现类似的示例:
library("lubridate")
library("dplyr")
Data <- data.frame(Time = seq(from = 100, to = 1200, by = 100),
ColA = rnorm(n = 12, mean = 0, sd = 1),
ColB = rnorm(n = 12, mean = 10, sd = 1))
这将生成一个包含三列的DataFrame,如:Time,ColA和ColB。结果看起来像这样:
Time ColA ColB
1 100 0.3819418 9.793732
2 200 -0.6819604 9.809536
3 300 -1.5910664 10.491511
4 400 0.5091230 8.251863
5 500 1.4298513 10.939813
基于此,您可以使用 lubridate 和 dplyr 库来获得所需的结果,如下:
Data %>%
mutate(Hours = hour(seconds_to_period(Time)),
Minutes = minute(seconds_to_period(Time))) %>%
select(Hours, Minutes, ColA, ColB)
哪个会产生以下结果:
Hours Minutes ColA ColB
1 0 1 0.3819418 9.793732
2 0 3 -0.6819604 9.809536
3 0 5 -1.5910664 10.491511
4 0 6 0.5091230 8.251863
5 0 8 1.4298513 10.939813
该代码背后的逻辑如下:
首先,您要使用 seconds_to_period() <>将秒转换为 期间 (润滑对象代表时间流逝) / strong>功能。结果看起来像这样“ 2H 23M 20S” 然后,使用 hour()和minutes() 可以提取所需的单位,在这种情况下为数小时和数分钟。最后,您可以使用 select() 选择要保留的变量。希望对您有所帮助!
答案 1 :(得分:1)
没有其他软件包,您可以使用%/%
,即整数除法(类似于注释中A. Suliman的解决方案):
df$Hour <- df$Time %/% (60 * 60)
df$Minute <- df$Time %/% 60
df
# Time ColA Colb Hour Minute
#1 123 A B 0 2
数据
df <- read.table(text = "Time ColA Colb
123 A B", header = TRUE, stringsAsFactors = FALSE)