Nothing
## ---- include = FALSE---------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
## ----setup--------------------------------------------------------------------
library(eye)
library(eyedata)
## ----va-----------------------------------------------------------------------
## automatic detection of VA notation and converting to logMAR by default
x <- c(23, 56, 74, 58) ## ETDRS letters
to_logmar(x) # wrapper of va(x, to = "logmar")
## ... or convert to snellen
to_snellen(x) # wrapper of va(x, to = "snellen")
## eye knows metric as well
to_snellen(x, type = "m")
## And the decimal snellen notation, so much loved in Germany
to_snellen(x, type = "dec")
## Remove weird entries and implausible entries depending on the VA choice
x <- c("NLP", "0.8", "34", "3/60", "2/200", "20/50", " ", ".", "-", "NULL")
to_snellen(x)
to_snellen(x, from = "snellendec")
to_snellen(x, from = "etdrs")
to_snellen(x, from = "logmar")
## "plus/minus" entries are converted to the most probable threshold (any spaces allowed)
x <- c("20/200 - 1", "6/6-2", "20/50 + 3", "6/6-4", "20/33 + 4")
to_logmar(x)
## or evaluating them as logmar values (each optotype equals 0.02 logmar)
to_logmar(x, smallstep = TRUE)
## or you can also decide to completely ignore them (converting them to the nearest snellen value in the VA chart)
to_snellen(x, noplus = TRUE)
## -----------------------------------------------------------------------------
x <- c("r", "re", "od", "right", "l", "le", "os", "left", "both", "ou")
recodeye(x)
## chose the resulting codes
recodeye(x, to = c("od", "os", "ou"))
## Numeric codes 0:1/ 1:2 are recognized
x <- 1:2
recodeye(x)
## with weird missing values
x <- c(1:2, ".", NA, "", " ")
recodeye(x)
## If you are using different strings to code for eyes, e.g., you are using a different language, you can change this either with the "eyestrings" argument
french <- c("OD", "droit", "gauche", "OG")
recodeye(french, eyestrings = list(r = c("droit", "od"), l = c("gauche", "og")))
## or change it more globally with `set_eye_strings`
set_eye_strings(right = c("droit", "od"), left = c("gauche", "og"))
recodeye(french)
# to restore the default, call set_eye_strings empty
set_eye_strings()
## ----data frames--------------------------------------------------------------
wide1 <- data.frame(id = letters[1:3], r = 11:13 , l = 14:16)
iop_wide <- data.frame(id = letters[1:3], iop_r = 11:13, iop_l = 14:16)
## Mildly messy data frame with several variables spread over two columns:
wide_df <- data.frame(
id = letters[1:4],
surgery_right = c("TE", "TE", "SLT", "SLT"),
surgery_left = c("TE", "TE", "TE", "SLT"),
iop_r_preop = 21:24, iop_r_postop = 11:14,
iop_l_preop = 31:34, iop_l_postop = 11:14,
va_r_preop = 41:44, va_r_postop = 45:48,
va_l_preop = 41:44, va_l_postop = 45:48
)
## -----------------------------------------------------------------------------
## the variable has not been exactly named, (but it is probably IOP data),
## you can specify the dimension with the var argument
myop(wide1, var = "iop")
## If the dimension is already part of the column names, this is not necessary.
myop(iop_wide)
## myop deals with this in a breeze:
myop(wide_df)
## -----------------------------------------------------------------------------
myop_df <- myop(wide_df)
hyperop(myop_df, cols = matches("va|iop"))
## -----------------------------------------------------------------------------
blink(wide_df)
blink(amd)
## -----------------------------------------------------------------------------
name_mess <- data.frame(name = "a", oculus = "r", eyepressure = 14, vision = 0.2)
names(name_mess)
## -----------------------------------------------------------------------------
names(name_mess) <- c("patID", "eye", "IOP", "VA")
names(name_mess)
## ---- include=FALSE-----------------------------------------------------------
names(name_mess) <- c("name", "oculus", "eyepressure", "vision")
## -----------------------------------------------------------------------------
## if you only want to rename one or a few columns:
names(name_mess)[names(name_mess) %in% c("name", "vision")] <- c("patID", "VA")
names(name_mess)
## -----------------------------------------------------------------------------
## right and left eyes have common codes
## information on the tested dimension is included ("iop")
## VA and eye strings are separated by underscores
## No unnecessary underscores.
names(wide_df)
names(iop_wide)
## -----------------------------------------------------------------------------
## Id and Eye are common names, there are no spaces
## VA is separated from the rest with an underscore
## BUT:
## The names are quite long
## There is an unnecessary underscore (etdrs are always letters). Better just "VA"
c("Id", "Eye", "FollowupDays", "BaselineAge", "Gender", "VA_ETDRS_Letters",
"InjectionNumber")
## All names are commonly used (good!)
## But which dimension of "r"/"l" are we exactly looking at?
c("id", "r", "l")
## -----------------------------------------------------------------------------
## VA/IOP not separated with underscore
## `eye` won't be able to recognize IOP and VA columns
c("id", "iopr", "iopl", "VAr", "VAl")
## A human may think this is clear
## But `eye` will fail to understand those variable names
c("person", "goldmann", "vision")
## Not even clear to humans
c("var1", "var2", "var3")
## ----stats, warning=FALSE, message=FALSE--------------------------------------
clean_df <- myop(wide_df)
reveal(clean_df)
reveal(clean_df, by = "eye")
reveal(clean_df, by = c("eye", "surgery"))
## ----getage, warning=FALSE, message=FALSE-------------------------------------
dob <- c("1984-10-16", "2000-01-01")
## If no second date given, the age today
getage(dob)
## If the second argument is specified, the age until then
getage(dob, "2000-01-01")
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.