【发布时间】:2019-02-28 13:01:38
【问题描述】:
我编写了下面的函数,它采用非标准时间格式,例如'730' (7:30) 并将其转换为十进制小时数,例如'7.5'。
decimal_time <- function(x) {
x <- as.character(x)
tmp <- nchar(x)
if (tmp < 4 & !is.na(tmp)){
x <- paste0(strrep('0',4-tmp),as.character(x))
}
x <- sub("([[:digit:]]{2,2})$", ":\\1", x)
x <- strsplit(x,':')[[1]]
x <- as.numeric(x)
x[1]+x[2]/60
}
要将其应用于一列,我执行以下操作...
dt_times[, New_Time := lapply(Time, decimal_time)]
但是我不知道如何将这个相同的函数应用于许多共享相同格式的列。当然,如果它是一个矢量化函数(比如“平均”),那么我可以写...
dt_times[, lapply(.SD, mean), .SDcols = c('col1', 'col2')]
...但是如果我的函数首先使用 lapply 我该怎么办?!请帮忙!
【问题讨论】:
-
dt_times[, c('col1', 'col2') := lapply(.SD, decimal_time), .SDcols = c('col1', 'col2')]? -
谢谢,但这似乎不起作用 - 我得到了每一行第一行的结果...
-
" 在 if (tmp 1 并且只使用第一个元素"
标签: r dataframe data.table lapply