dplyr mutate_的data.table替代方案?

时间:2017-02-01 16:58:22

标签: r data.table dplyr

我有以下使用dplyr的代码。 由于数据量较大,我们希望使用data.table。

test <- function(Act, mac, type){
    Act %>%
    mutate_(var = type) %>%
    filter(var == mac) %>%
    filter(floor_date(as.Date(submit_ts), 'year') == thisYear)
}

法案如下

| submit_ts     | col1          | col2  |
| ------------- |---------------|-------|
| '2015-01-01'  | 'x'           | 1000  |
| '2015-01-01'  | 'y'           |  200  |
| '2015-01-01'  | 'x'           |  200  |

基本上功能可以如下工作

test(act, 'x', 'col1', 2015)

result is as follows 
| submit_ts     | col1          | col2  |
| ------------- |---------------|-------|
| '2015-01-01'  | 'x'           | 1000  |
| '2015-01-01'  | 'x'           |  200  |


test(act, 200, 'col2', 2015)
result is as follows 
| submit_ts     | col1          | col2  |
| ------------- |---------------|-------|
| '2015-01-01'  | 'y'           |  200  |
| '2015-01-01'  | 'x'           |  200  |

我应该如何使用data.table?

1 个答案:

答案 0 :(得分:2)

我们可以在data.table中使用

执行类似的方法
library(data.table)
library(lubridate)
test1 <- function(Act, mac, type){
    setnames(setDT(Act), type, "var")[
       var==mac & year(floor_date(as.Date(submit_ts), "year"))==thisYear]
 }

test1(dat, 2, "val")
#    submit_ts var
#1: 2013-05-05   2
#2: 2013-05-12   2

注意:floor_date不会返回yyyy年。

数据

dat <- data.frame(submit_ts= c("2013-05-05", "2012-05-10", "2013-05-12"),
                 val = c(2, 1, 2), stringsAsFactors=FALSE)
thisYear <- 2013