Status
lines of R code: 83, lines of test code: 27
Version
0.3.3 ( 2020-09-11 18:11:12 )
Description
Tool collection for common and not so common data science use cases. This includes custom made algorithms for data management as well as value calculations that are hard to find elsewhere because of their specificity but would be a waste to get lost nonetheless. Currently available functionality: find sub-graphs in an edge list data.frame, find mode or modes in a vector of values, extract (a) specific regular expression group(s), generate ISO time stamps that play well with file names, or generate URL parameter lists by expanding value combinations.
License
GPL (>= 2)
Peter Meissner [aut, cre]
Citation
citation("dsmisc")
P (2020). dsmisc: Data Science Box of Pandora Miscellaneous. R package version 0.3.3. Meissner
BibTex for citing
toBibtex(citation("dsmisc"))
@Manual{,
title = {dsmisc: Data Science Box of Pandora Miscellaneous},
author = {Peter Meissner},
year = {2020},
note = {R package version 0.3.3},
}
Installation
Stable version from CRAN:
install.packages("dsmisc")
starting up …
library("dsmisc")
find isolated graphs / networks
A graph described by an edgelist with two distinct subgraphs.
<-
edges_df data.frame(
node_1 = c(1:5, 10:8),
node_2 = c(2:6, 7,7,7)
)
edges_df
## node_1 node_2
## 1 1 2
## 2 2 3
## 3 3 4
## 4 4 5
## 5 5 6
## 6 10 7
## 7 9 7
## 8 8 7
Finding subgraphs and grouping them together via subgraph id.
$subgraph_id <-
edges_dfgraphs_find_subgraphs(
id_1 = edges_df$node_1,
id_2 = edges_df$node_2,
verbose = 0
)
edges_df
## node_1 node_2 subgraph_id
## 1 1 2 1
## 2 2 3 1
## 3 3 4 1
## 4 4 5 1
## 5 5 6 1
## 6 10 7 2
## 7 9 7 2
## 8 8 7 2
speedtest for large graph
<-
edges_df data.frame(
node_1 = sample(x = 1:10000, size = 10^5, replace = TRUE),
node_2 = sample(x = 1:10000, size = 10^5, replace = TRUE)
)
system.time({
$subgraph_id <-
edges_dfgraphs_find_subgraphs(
id_1 = edges_df$node_1,
id_2 = edges_df$node_2,
verbose = 0
) })
## user system elapsed
## 2.96 0.01 3.02
Calculating the modus from a collection of values
# one modus only
stats_mode(1:10)
## Warning in stats_mode(1:10): modus : multimodal but only one value returned (use warn=FALSE to turn this off)
## [1] 1
# all values if multiple modi are found
stats_mode_multi(1:10)
## [1] 1 2 3 4 5 6 7 8 9 10
{stringr} / {stringi} packages are cool … but can they do this
(actually they can, of cause but with a little more work and cognitive
load needed, e.g.:
stringr::str_match(strings, "([\\w])_(?:\\d+)")[, 2]
)?
Extract specific RegEx groups
<- paste(LETTERS, seq_along(LETTERS), sep = "_")
strings
# whole pattern
str_group_extract(strings, "([\\w])_(\\d+)")
## [1] "A_1" "B_2" "C_3" "D_4" "E_5" "F_6" "G_7" "H_8" "I_9" "J_10" "K_11" "L_12" "M_13" "N_14" "O_15"
## [16] "P_16" "Q_17" "R_18" "S_19" "T_20" "U_21" "V_22" "W_23" "X_24" "Y_25" "Z_26"
# first group
str_group_extract(strings, "([\\w])_(\\d+)", 1)
## [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
# second group
str_group_extract(strings, "([\\w])_(\\d+)", 2)
## [1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "20" "21"
## [22] "22" "23" "24" "25" "26"
Transform factor columns in a data.frame to character vectors
<-
df data.frame(
a = 1:2,
b = factor(c("a", "b")),
c = as.character(letters[3:4]),
stringsAsFactors = FALSE
)vapply(df, class, "")
## a b c
## "integer" "factor" "character"
<- df_defactorize(df)
df_df vapply(df_df, class, "")
## a b c
## "integer" "character" "character"
File name ready time stamps
# current time
time_stamp()
## [1] "2020-09-11_20_11_33"
time_stamp(
ts = as.POSIXct(c("2010-01-27 10:23:45", "2010-01-27 10:23:45")),
sep = c("","_","")
)
## [1] "20100127_102345" "20100127_102345"
time_stamp(
ts = as.POSIXct(c("2010-01-27 10:23:45", "2010-01-27 10:23:45")),
sep = c("")
)
## [1] "20100127102345" "20100127102345"
prepare multiple URLs via query parameter grid expansion
web_gen_param_list_expand(id=1:3, lang=c("en", "de"))
## [1] "id=1&lang=en" "id=2&lang=en" "id=3&lang=en" "id=1&lang=de" "id=2&lang=de" "id=3&lang=de"