cat(gsub("\\n ", "", packageDescription("dat", fields = "Description")))
remotes::install_github("wahani/dat")
install.packages("dat")
R CMD check. And you don't like that.dplyr is not respecting the class of the object it operates on; the class
attribute changes on-the-fly.dplyr nor data.table are playing nice with S4, but you really,
really want a S4 data.table or tbl_df.rlist and purrr.The examples are from the introductory vignette of dplyr. You still work with
data frames: so you can simply mix in dplyr features whenever you need them.
library("nycflights13") library("dat")
We can use mutar to select rows. When you
reference a variable in the data frame, you can indicate this by using a one
sided formula.
mutar(flights, ~ month == 1 & day == 1) mutar(flights, ~ 1:10)
And for sorting:
mutar(flights, ~ order(year, month, day))
You can use characters, logicals, regular expressions and functions to select columns. Regular expressions are indicated by a leading "^".
flights %>% extract(c("year", "month", "day")) %>% extract("^day$") %>% extract(is.numeric)
The main difference between dplyr::mutate and mutar is that you use a ~
instead of =.
mutar( flights, gain ~ arr_delay - dep_delay, speed ~ distance / air_time * 60 )
Grouping data is handled within mutar:
mutar(flights, n ~ .N, by = "month")
mutar(flights, delay ~ mean(dep_delay, na.rm = TRUE), by = "month")
You can also provide additional arguments to a formula. This is especially helpful when you want to pass arguments from a function to such expressions. The additional augmentation can be anything which you can use to select columns (character, regular expression, function) or a named list where each element is a character.
mutar( flights, .n ~ mean(.n, na.rm = TRUE) | "^.*delay$", .x ~ mean(.x, na.rm = TRUE) | list(.x = "arr_time"), by = "month" )
Using this package you can create S4 classes to contain a data frame (or a
data.table) and use the interface to dplyr. Both dplyr and data.table do
not support integration with S4. The main function here is mutar which is
generic enough to link to subsetting of rows and cols as well as mutate and
summarise. In the background dplyrs ability to work on a data.table is being
used.
library("data.table") setClass("DataTable", "data.table") DataTable <- function(...) { new("DataTable", data.table::data.table(...)) } setMethod("[", "DataTable", mutar) dtflights <- do.call(DataTable, nycflights13::flights) dtflights[1:10, c("year", "month", "day")] dtflights[n ~ .N, by = "month"] dtflights[n ~ .N, sby = "month"] dtflights %>% filtar(~month > 6) %>% mutar(n ~ .N, by = "month") %>% sumar(n ~ data.table::first(n), by = "month")
Inspired by rlist and purrr some low level operations on vectors are
supported. The aim here is to integrate syntactic sugar for anonymous functions.
Furthermore the functions should support the use of pipes.
map and flatmap as replacements for the apply functionsextract for subsettingreplace for replacing elements in a vectorWhat we can do with map:
map(1:3, ~ .^2) flatmap(1:3, ~ .^2) map(1:3 ~ 11:13, c) # zip dat <- data.frame(x = 1, y = "") map(dat, x ~ x + 1, is.numeric)
What we can do with extract:
extract(1:10, ~ . %% 2 == 0) %>% sum extract(1:15, ~ 15 %% . == 0) l <- list(aList = list(x = 1), aAtomic = "hi") extract(l, "^aL") extract(l, is.atomic)
What we can do with replace:
replace(c(1, 2, NA), is.na, 0) replace(c(1, 2, NA), rep(TRUE, 3), 0) replace(c(1, 2, NA), 3, 0) replace(list(x = 1, y = 2), "x", 0) replace(list(x = 1, y = 2), "^x$", 0) replace(list(x = 1, y = "a"), is.character, NULL)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.