【发布时间】:2019-05-13 19:43:53
【问题描述】:
我的数据集称为数据,我有一个名为时间的列,其中包含 mm:ss 格式的时间。我还写了一个函数functime(var1,var2)。
我最终希望使用 apply 或 vapply 并将 var2 设置为常量(假设 var2 = 6),并将 var1 设置为 data$time 列的每个值。
类似:
如果
data$time <- c("10:10","11:00", "09:30"), when I do vapply(), I would like to get a
data$output <-c(functime(data$time[1],6),functime(data$time[2],6),functime(data$time[3],6))
在本例中与
相同data$output <- c(functime("10:10",6),functime("11:00",6),functime("09:30",6))
我的蹩脚尝试是这样的:
vapply(data$time,functime,var2 = 6,FUN.VALUE = 1)
vapply 的文档说它应该是 :vapply(x,fun,fun.value)
我对如何“说 vapply”感到困惑,我想将 data$time 列的所有行作为其第一个参数,有一个固定的第二个参数,我将其定义为 6。
最终我想使用 mutate 将我的 data$output 添加到原始数据集中。
编辑:(包括数据行和函数)
data$id <- c(9,6,5763,4)
data$time <- c("5:06","5:06","5:11","5:08")
data$city <-c("Kyle","Oklahoma","Monterey","Austin")
函数是:
calctime <- function(racePace, raceDistance){
# racePace is the per unit pace in mm:ss - character
# raceDistance is the total race distance - numeric
# Pace and race distance must use same units (km or mi or whatever)
# Seconds to character time function
CharMinSec <- function(sec){
outMin <- floor(sec/60)
outSec <- ((sec/60)-outMin)*60
if(outSec==0 | round(outSec)<10){
outChar <- paste0(outMin,":0",round(outSec))
} else {
outChar <- paste(outMin,round(outSec),sep=":")
}
outChar
}
paceMinSec <- as.numeric(strsplit(racePace,':')[[1]])
paceSec <- paceMinSec[1]*60+ paceMinSec[2]
raceMin <- floor(paceSec*raceDistance/60)
raceSec <- ((paceSec*raceDistance/60)-raceMin)*60
raceTime <- CharMinSec(raceMin*60+raceSec)
list(Seconds=raceSec)
}
# Example of 4:15/km for a half-marathon
calctime("4:15",21.097494)
【问题讨论】:
-
你能发布你的函数代码和你的一些数据吗?
-
是的,我会编辑答案。该功能不是我的(针对抄袭问题),我调整了我在网上找到的一个正在做我想做的事情。
-
完成,希望对您有所帮助