The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.

Advanced Data Manipulation with m61r in Pure Base R

pv71u98h1

2026-01-12

Introduction

The m61r package provides a grammar for data manipulation prioritising speed and memory efficiency.

The Pipeline Interface

The m61r object allows for seamless chaining of operations.

p <- m61r(mtcars)
p$filter(~mpg > 20)
p$select(~c(mpg, cyl, hp))
p$mutate(hp_norm = ~hp / max(hp))
p$head()
##    mpg cyl  hp   hp_norm
## 1 21.0   6 110 0.9734513
## 2 21.0   6 110 0.9734513
## 3 22.8   4  93 0.8230088
## 4 21.4   6 110 0.9734513
## 5 24.4   4  62 0.5486726
## 6 22.8   4  95 0.8407080

Advanced Scoped Operations

With Subset Data (.SD)

You can use the .SD() method within a formula to access the current data subset for advanced transformations.

p <- m61r(iris)
p$mutate(scaled = ~lapply(.SD()[, vapply(.SD(), is.numeric, logical(1))], 
                          function(x) x * 100))
p$head(3)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          510         350          140          20  setosa
## 2          490         300          140          20  setosa
## 3          470         320          130          20  setosa

With select_cols

The .select_cols helper allows for clean, functional column selection based on predicates.

tmp <- m61r(mtcars)
tmp$mutate(all_num = ~lapply(.SD()[, .select_cols(.SD(), is.numeric)], 
                             function(x) x * 10))
tmp$head(3)
##   mpg cyl disp   hp drat    wt  qsec vs am gear carb
## 1 210  60 1600 1100 39.0 26.20 164.6  0 10   40   40
## 2 210  60 1600 1100 39.0 28.75 170.2  0 10   40   40
## 3 228  40 1080  930 38.5 23.20 186.1 10 10   40   10

Conversions

Easily convert multiple columns at once using standard R functions inside the m61r environment.

p <- m61r(mtcars)
# Convert all columns to numeric using lapply for Base R purity
p$mutate(~lapply(.SD(), as.numeric))

Pattern Matching with Grep

Use grep to apply transformations to columns matching specific naming patterns.

p <- m61r(mtcars)
# Normalize only columns that contain the word "mpg" or "hp"
p$mutate(~lapply(.SD()[, grep("mpg|hp", names(.SD()))], function(x) x / max(x)))
p$head()
##         mpg cyl disp        hp drat    wt  qsec vs am gear carb
## 1 0.6194690   6  160 0.3283582 3.90 2.620 16.46  0  1    4    4
## 2 0.6194690   6  160 0.3283582 3.90 2.875 17.02  0  1    4    4
## 3 0.6725664   4  108 0.2776119 3.85 2.320 18.61  1  1    4    1
## 4 0.6312684   6  258 0.3283582 3.08 3.215 19.44  1  0    3    1
## 5 0.5516224   8  360 0.5223881 3.15 3.440 17.02  0  0    3    2
## 6 0.5339233   6  225 0.3134328 2.76 3.460 20.22  1  0    3    1

Complex Conditional Logic

The case_when function provides a vectorised way to handle complex conditional assignments.

p <- m61r(mtcars)
p$mutate(category = ~case_when(
  mpg > 25, "Eco",
  mpg > 18, "Standard",
  "High-Perf"
))
head(p[, c("mpg", "category")], 5)
##    mpg category
## 1 21.0 Standard
## 2 21.0 Standard
## 3 22.8 Standard
## 4 21.4 Standard
## 5 18.7 Standard

Across

The across() function provides a familiar syntax for applying functions across a selection of columns during summarisation.

p <- m61r(mtcars)
p$summarise(
  avg = ~across(c("mpg", "disp", "hp"), mean)
)

Conclusion

By staying true to Base R, m61r ensures that your code remains portable, fast, and light.

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.