我想撰寫一個函式將“time_spent”列中的字符向量轉換為分鐘的數字向量。
#Import libraries
library(tidyr)
library(dplyr)
library(lubridate)
#Create dataframe
df <- data.frame(country = c("Russia", "China", "USA"),
time_spent = c("0:10", "1:20", "2:36"))
#Convert "time_spent" from factor to character
df$time_spent <- lapply(df$time_spent, as.character)
我可以用下面的代碼做到這一點,但我想學習如何將它寫成一個函式。
df %>%
mutate(minutes = paste(time_spent, "00", sep = ":"),
minutes = hms(minutes),
minutes = hour(minutes)*60 minute(minutes))
我知道我已經洗掉了這個函式及其應用程式,但我不知道如何讓它作業。
#Function to convert "time_spent" vector into minutes
convert_to_minutes <- function(x) {
df$x = paste(x, "00", sep = ":") %>%
df$x = hms(x) %>%
df$x = hour(x)*60 minute(x)
}
#Apply function
df %>%
convert_to_minutes(df$time_spent)
相關問題2
如何map將我的convert_to_minutes函式應用于time_spent以下資料幀中的多個向量?
df2 <- data.frame(country = c("Russia", "China", "USA"),
time_spent = c("0:10", "1:20", "2:36"),
time_spent2 = c("0:15", "0:12", "1:47"),
time_spent3 = c("0:25", "3:45", "0:18"))
uj5u.com熱心網友回復:
僅在基數 R 中轉換為分鐘的函式可能如下所示。
convert_to_minutes <- function(x) {
f <- function(x) as.vector(as.integer(x) %*% c(60, 1))
y <- strsplit(as.character(x), ":")
sapply(y, f)
}
y <- c("0:10", "1:20", "2:36")
convert_to_minutes(y)
#[1] 10 80 156
uj5u.com熱心網友回復:
無需撰寫整個函式,這里使用lubridate::hm和lubridate::as.duration函式將時間資料的一部分轉換為分鐘。
x <- c("0:10", "1:20", "2:36")
as.numeric(as.duration(hm(x)), "minutes")
# [1] 10 80 156
轉換 df2 的完整答案
df2 <- data.frame(country = c("Russia", "China", "USA"),
time_spent = c("0:10", "1:20", "2:36"),
time_spent2 = c("0:15", "0:12", "1:47"),
time_spent3 = c("0:25", "3:45", "0:18"))
library(lubridate)
library(data.table)
setDT(df2)
cols <- 2:length(names(df2))
df2[, (cols) := lapply(.SD, function(x) as.numeric(as.duration(hm(x)), "minutes")), .SDcols = cols]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/356506.html
上一篇:單擊卡片內的特定元素
