| Stata | R |
|---|---|
| max(v1) | max(v1) |
| min(v1) | min(v1) |
| max(v1, v2) | pmax(v1, v2) |
| min(v1, v2) | pmin(v1, v2) |
| cond(v1 > 3, 0, 1) | ifelse(v1 > 3, 0, 1) |
| nvals | n_distinct |
| group | interaction |
| tag | row_number() == 1 |
The package statar also includes functions that correspond to the Stata commands count, mode, xtile and _pctile
Use backlash to escape quotes in a character:
print("Package \"dplyr\"")
#> [1] "Package \"dplyr\""
Automatically escape double quotes within a string by enclosing it within single quotes (similarly to Stata compound quotes):
# Stata: display(`"Package "dplyr""')
print('Package "dplyr"')
#> [1] "Package \"dplyr\""
Misc functions:
| Stata | R |
|---|---|
| lower | tolower |
| upper | toupper |
| trim | str_strim |
| strlen | str_length |
| substr | str_sub |
Combine strings with paste
filename <- "temp.csv"
filepath <- paste("~/Dropbox", filename, sep = "")
df <- read_csv(filepath)
Note the difference between the option sep and collapse
paste("x1", "x2", "x3", sep = "+")
#> [1] "x1+x2+x3"
paste(c("x1", "x2", "x3"), collapse = "+")
#> [1] "x1+x2+x3"
Use the package stringr to match, replace, or split strings according to certain patterns. Each function of stringr has the same syntax: the first argument is a character vector, the second argument is a regex pattern. Instead of a regex pattern, use fixed() for exact matching, or glob2rx for wildcard matching.
| stringr | Stata (fixed) | Stata (wildcard) | Stata (regex) |
|---|---|---|---|
| str_detect | strmatch | regexm | |
| str_locate | strpos | ||
| str_match | regexs if regexm | ||
| str_replace | subinstr(,1) | regexr | |
| str_replace_all | subinstr(,.) | ||
| str_split | split |
Because backlashes are used to escape quotes, backlashes themselves should be escaped in a regex pattern. For instance, to suppress the first dot in a string:
# Stata: regexr("Package .", "\.","")
str_replace("Package .","\\.", "")
Compute distances between strings with the package stringdist.
Use the package lubridate to work with dates. To convert strings (of daily date) and integers (number of days with respect to origin) to daily dates, one can use the function ymd, mdy, etc:
library(lubridate)
ymd("1900-01-01")
mdy("03/01/1998")
Extract information on dates by using the lubridate function week, month, year
x <- mdy("03/01/1998")
week(x)
month(x)
year(x)
Add periods to date through the function weeks, months and years
x + days(1)
x + weeks(1)
x + months(1)
Round dates using the function floor_date or ceiling_date
floor_date(x, unit = "week")
The package statar defines classes for monthly, and quarterly dates, coded as elapsed periods since “01/01/190”. This allows to use simple arithmetic on quarters and months, similarly to Stata.
datem <- as.monthly(x)
datem
#> [1] "1998m2"
datem + 1
#> [1] "1998m3"