R Data Structure - Vectors

# creating vectors of data for three medical patients
subject_name <- c("John Doe", "Jane Doe", "Steve Graves")
temperature <- c(98.1, 98.6, 101.4)
flu_status <- c(FALSE, FALSE, TRUE)
# accessing the second element in body temperature vector
temperature[2]
[1] 98.6

Accesing items in vector

# including items in the range 2 to 3
temperature[2:3]
[1]  98.6 101.4
# excluding item 2 using the minus sign
temperature[-2]
[1]  98.1 101.4
# using a vector to indicate whether to include item
temperature[c(TRUE, TRUE, FALSE)]
[1] 98.1 98.6

Factors

# add gender factor
gender <- factor(c("MALE", "FEMALE", "MALE"))
gender
[1] MALE   FEMALE MALE  
Levels: FEMALE MALE
# adding blood type factor
blood <- factor(c("O", "AB", "A"),
                levels = c("A", "B", "AB", "O"))
blood
[1] O  AB A 
Levels: A B AB O
# adding ordered factor
symptoms <- factor(c("SEVERE", "MILD", "MODERATE"),
                   levels = c("MILD", "MODERATE", "SEVERE"),
                   ordered = TRUE)
symptoms
[1] SEVERE   MILD     MODERATE
Levels: MILD < MODERATE < SEVERE
# checking for symptoms greater than moderate
symptoms > "MODERATE"
[1]  TRUE FALSE FALSE

Lists

# displaying information for a patient
subject_name[1]
[1] "John Doe"
temperature[1]
[1] 98.1
flu_status[1]
[1] FALSE
gender[1]
[1] MALE
Levels: FEMALE MALE
blood[1]
[1] O
Levels: A B AB O
symptoms[1]
[1] SEVERE
Levels: MILD < MODERATE < SEVERE
# create list for a patient
subject1 <- list(fullname = subject_name[1], 
                 temperature = temperature[1],
                 flu_status = flu_status[1],
                 gender = gender[1],
                 blood = blood[1],
                 symptoms = symptoms[1])
# displaying the patient
subject1
$fullname
[1] "John Doe"

$temperature
[1] 98.1

$flu_status
[1] FALSE

$gender
[1] MALE
Levels: FEMALE MALE

$blood
[1] O
Levels: A B AB O

$symptoms
[1] SEVERE
Levels: MILD < MODERATE < SEVERE

Methods for accesing a list

# fisrt get a single list value by position (returns a sub-list)
subject1[2]
$temperature
[1] 98.1
# then get a single list value by position (returns a numeric vector)
subject1[[2]]
[1] 98.1
# get a single list value by name
subject1$temperature
[1] 98.1
# get several list items by specifying a vector of names
subject1[c("temperature", "flu_status")]
$temperature
[1] 98.1

$flu_status
[1] FALSE

Accesing a list like a vector

# get values 2 and 3
subject1[2:3]
$temperature
[1] 98.1

$flu_status
[1] FALSE

Data Frame - Creating a data frame from medical patient data

pt_data <- data.frame(subject_name, temperature, flu_status, gender,
                      blood, symptoms, stringsAsFactors = FALSE)
# displaying the data frame
pt_data

Accesing a data frame

# get a single column
pt_data$subject_name
[1] "John Doe"     "Jane Doe"     "Steve Graves"
# get several columns by specifying a vector of names
pt_data[c("temperature", "flu_status")]
# this is the same as above, extracting temperature and flu_status
pt_data[2:3]
# accessing by row and column
pt_data[1, 2]
[1] 98.1
# accessing several rows and several columns using vectors
pt_data[c(1, 3), c(2, 4)]

Leaving a row or column blank to extract all rows or columns

# column 1, all rows
pt_data[, 1]
[1] "John Doe"     "Jane Doe"     "Steve Graves"
# row 1, all columns
pt_data[1, ]
# all rows and all columns
pt_data[ , ]
# the following are equivalent
pt_data[c(1, 3), c("temperature", "gender")]
pt_data[-2, c(-1, -3, -5, -6)]
# creating a Celsius temperature column
pt_data$temp_c <- (pt_data$temperature - 32) * (5 / 9)
# comparing before and after
pt_data[c("temperature", "temp_c")]

Matrixes

# creating a 2x2 matrix
m <- matrix(c(1, 2, 3, 4), nrow = 2)
m
     [,1] [,2]
[1,]    1    3
[2,]    2    4
# equivalent to the above
m <- matrix(c(1, 2, 3, 4), ncol = 2)
m
     [,1] [,2]
[1,]    1    3
[2,]    2    4
# creating a 2x3 matrix
m <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2)
m
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
# creating a 3x2 matrix
m <- matrix(c(1, 2, 3, 4, 5, 6), ncol = 2)
m
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
# extracting values from matrixes
m[1, 1]
[1] 1
m[3, 2]
[1] 6
# extracting rows
m[1, ]
[1] 1 4
# extracting columns
m[, 1]
[1] 1 2 3
LS0tCnRpdGxlOiAiQ2xhc3MgQWN0aXZpdHkgIzMiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KUiBEYXRhIFN0cnVjdHVyZSAtIFZlY3RvcnMgCgoKYGBge3J9CiMgY3JlYXRpbmcgdmVjdG9ycyBvZiBkYXRhIGZvciB0aHJlZSBtZWRpY2FsIHBhdGllbnRzCnN1YmplY3RfbmFtZSA8LSBjKCJKb2huIERvZSIsICJKYW5lIERvZSIsICJTdGV2ZSBHcmF2ZXMiKQp0ZW1wZXJhdHVyZSA8LSBjKDk4LjEsIDk4LjYsIDEwMS40KQpmbHVfc3RhdHVzIDwtIGMoRkFMU0UsIEZBTFNFLCBUUlVFKQpgYGAKYGBge3J9CiMgYWNjZXNzaW5nIHRoZSBzZWNvbmQgZWxlbWVudCBpbiBib2R5IHRlbXBlcmF0dXJlIHZlY3Rvcgp0ZW1wZXJhdHVyZVsyXQpgYGAKCgpBY2Nlc2luZyBpdGVtcyBpbiB2ZWN0b3IgCgpgYGB7cn0KIyBpbmNsdWRpbmcgaXRlbXMgaW4gdGhlIHJhbmdlIDIgdG8gMwp0ZW1wZXJhdHVyZVsyOjNdCmBgYApgYGB7cn0KIyBleGNsdWRpbmcgaXRlbSAyIHVzaW5nIHRoZSBtaW51cyBzaWduCnRlbXBlcmF0dXJlWy0yXQpgYGAKYGBge3J9CiMgdXNpbmcgYSB2ZWN0b3IgdG8gaW5kaWNhdGUgd2hldGhlciB0byBpbmNsdWRlIGl0ZW0KdGVtcGVyYXR1cmVbYyhUUlVFLCBUUlVFLCBGQUxTRSldCmBgYAoKCkZhY3RvcnMgCmBgYHtyfQojIGFkZCBnZW5kZXIgZmFjdG9yCmdlbmRlciA8LSBmYWN0b3IoYygiTUFMRSIsICJGRU1BTEUiLCAiTUFMRSIpKQpnZW5kZXIKYGBgCmBgYHtyfQojIGFkZGluZyBibG9vZCB0eXBlIGZhY3RvcgpibG9vZCA8LSBmYWN0b3IoYygiTyIsICJBQiIsICJBIiksCiAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJBIiwgIkIiLCAiQUIiLCAiTyIpKQpibG9vZApgYGAKYGBge3J9CiMgYWRkaW5nIG9yZGVyZWQgZmFjdG9yCnN5bXB0b21zIDwtIGZhY3RvcihjKCJTRVZFUkUiLCAiTUlMRCIsICJNT0RFUkFURSIpLAogICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiTUlMRCIsICJNT0RFUkFURSIsICJTRVZFUkUiKSwKICAgICAgICAgICAgICAgICAgIG9yZGVyZWQgPSBUUlVFKQpgYGAKYGBge3J9CnN5bXB0b21zCmBgYApgYGB7cn0KIyBjaGVja2luZyBmb3Igc3ltcHRvbXMgZ3JlYXRlciB0aGFuIG1vZGVyYXRlCnN5bXB0b21zID4gIk1PREVSQVRFIgpgYGAKCgpMaXN0cyAKYGBge3J9CiMgZGlzcGxheWluZyBpbmZvcm1hdGlvbiBmb3IgYSBwYXRpZW50CnN1YmplY3RfbmFtZVsxXQpgYGAKYGBge3J9CnRlbXBlcmF0dXJlWzFdCmBgYApgYGB7cn0KZmx1X3N0YXR1c1sxXQpgYGAKYGBge3J9CmdlbmRlclsxXQpgYGAKYGBge3J9CmJsb29kWzFdCmBgYApgYGB7cn0Kc3ltcHRvbXNbMV0KYGBgCmBgYHtyfQojIGNyZWF0aW5nIGxpc3QgZm9yIGEgcGF0aWVudApzdWJqZWN0MSA8LSBsaXN0KGZ1bGxuYW1lID0gc3ViamVjdF9uYW1lWzFdLCAKICAgICAgICAgICAgICAgICB0ZW1wZXJhdHVyZSA9IHRlbXBlcmF0dXJlWzFdLAogICAgICAgICAgICAgICAgIGZsdV9zdGF0dXMgPSBmbHVfc3RhdHVzWzFdLAogICAgICAgICAgICAgICAgIGdlbmRlciA9IGdlbmRlclsxXSwKICAgICAgICAgICAgICAgICBibG9vZCA9IGJsb29kWzFdLAogICAgICAgICAgICAgICAgIHN5bXB0b21zID0gc3ltcHRvbXNbMV0pCmBgYApgYGB7cn0KIyBkaXNwbGF5aW5nIHRoZSBwYXRpZW50CnN1YmplY3QxCmBgYAoKCk1ldGhvZHMgZm9yIGFjY2VzaW5nIGEgbGlzdAoKYGBge3J9CiMgZmlzcnQgZ2V0IGEgc2luZ2xlIGxpc3QgdmFsdWUgYnkgcG9zaXRpb24gKHJldHVybnMgYSBzdWItbGlzdCkKc3ViamVjdDFbMl0KYGBgCmBgYHtyfQojIHRoZW4gZ2V0IGEgc2luZ2xlIGxpc3QgdmFsdWUgYnkgcG9zaXRpb24gKHJldHVybnMgYSBudW1lcmljIHZlY3RvcikKc3ViamVjdDFbWzJdXQpgYGAKYGBge3J9CiMgZ2V0IGEgc2luZ2xlIGxpc3QgdmFsdWUgYnkgbmFtZQpzdWJqZWN0MSR0ZW1wZXJhdHVyZQpgYGAKYGBge3J9CiMgZ2V0IHNldmVyYWwgbGlzdCBpdGVtcyBieSBzcGVjaWZ5aW5nIGEgdmVjdG9yIG9mIG5hbWVzCnN1YmplY3QxW2MoInRlbXBlcmF0dXJlIiwgImZsdV9zdGF0dXMiKV0KYGBgCgoKQWNjZXNpbmcgYSBsaXN0IGxpa2UgYSB2ZWN0b3IgCgpgYGB7cn0KIyBnZXQgdmFsdWVzIDIgYW5kIDMKc3ViamVjdDFbMjozXQpgYGAKCgpEYXRhIEZyYW1lIC0gQ3JlYXRpbmcgYSBkYXRhIGZyYW1lIGZyb20gbWVkaWNhbCBwYXRpZW50IGRhdGEgCgpgYGB7cn0KcHRfZGF0YSA8LSBkYXRhLmZyYW1lKHN1YmplY3RfbmFtZSwgdGVtcGVyYXR1cmUsIGZsdV9zdGF0dXMsIGdlbmRlciwKICAgICAgICAgICAgICAgICAgICAgIGJsb29kLCBzeW1wdG9tcywgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQpgYGAKYGBge3J9CiMgZGlzcGxheWluZyB0aGUgZGF0YSBmcmFtZQpwdF9kYXRhCmBgYAoKQWNjZXNpbmcgYSBkYXRhIGZyYW1lIAoKYGBge3J9CiMgZ2V0IGEgc2luZ2xlIGNvbHVtbgpwdF9kYXRhJHN1YmplY3RfbmFtZQpgYGAKYGBge3J9CiMgZ2V0IHNldmVyYWwgY29sdW1ucyBieSBzcGVjaWZ5aW5nIGEgdmVjdG9yIG9mIG5hbWVzCnB0X2RhdGFbYygidGVtcGVyYXR1cmUiLCAiZmx1X3N0YXR1cyIpXQpgYGAKYGBge3J9CiMgc2FtZSBhcyBhYm92ZSwgZXh0cmFjdGluZyB0ZW1wZXJhdHVyZSBhbmQgZmx1X3N0YXR1cwpwdF9kYXRhWzI6M10KYGBgCmBgYHtyfQojIGFjY2Vzc2luZyBieSByb3cgYW5kIGNvbHVtbgpwdF9kYXRhWzEsIDJdCmBgYApgYGB7cn0KIyBhY2Nlc3Npbmcgc2V2ZXJhbCByb3dzIGFuZCBzZXZlcmFsIGNvbHVtbnMgdXNpbmcgdmVjdG9ycwpwdF9kYXRhW2MoMSwgMyksIGMoMiwgNCldCmBgYAoKCkxlYXZpbmcgYSByb3cgb3IgY29sdW1uIGJsYW5rIHRvIGV4dHJhY3QgYWxsIHJvd3Mgb3IgY29sdW1ucwoKYGBge3J9CiMgY29sdW1uIDEsIGFsbCByb3dzCnB0X2RhdGFbLCAxXQpgYGAKYGBge3J9CiMgcm93IDEsIGFsbCBjb2x1bW5zCnB0X2RhdGFbMSwgXQpgYGAKYGBge3J9CiMgYWxsIHJvd3MgYW5kIGFsbCBjb2x1bW5zCnB0X2RhdGFbICwgXQpgYGAKYGBge3J9CiMgdGhlIGZvbGxvd2luZyBhcmUgZXF1aXZhbGVudApwdF9kYXRhW2MoMSwgMyksIGMoInRlbXBlcmF0dXJlIiwgImdlbmRlciIpXQpgYGAKYGBge3J9CnB0X2RhdGFbLTIsIGMoLTEsIC0zLCAtNSwgLTYpXQpgYGAKYGBge3J9CiMgY3JlYXRpbmcgYSBDZWxzaXVzIHRlbXBlcmF0dXJlIGNvbHVtbgpwdF9kYXRhJHRlbXBfYyA8LSAocHRfZGF0YSR0ZW1wZXJhdHVyZSAtIDMyKSAqICg1IC8gOSkKYGBgCmBgYHtyfQojIGNvbXBhcmluZyBiZWZvcmUgYW5kIGFmdGVyCnB0X2RhdGFbYygidGVtcGVyYXR1cmUiLCAidGVtcF9jIildCmBgYAoKCk1hdHJpeGVzIAoKYGBge3J9CiMgY3JlYXRpbmcgYSAyeDIgbWF0cml4Cm0gPC0gbWF0cml4KGMoMSwgMiwgMywgNCksIG5yb3cgPSAyKQptCmBgYApgYGB7cn0KIyBlcXVpdmFsZW50IHRvIHRoZSBhYm92ZQptIDwtIG1hdHJpeChjKDEsIDIsIDMsIDQpLCBuY29sID0gMikKbQpgYGAKYGBge3J9CiMgY3JlYXRpbmcgYSAyeDMgbWF0cml4Cm0gPC0gbWF0cml4KGMoMSwgMiwgMywgNCwgNSwgNiksIG5yb3cgPSAyKQptCmBgYApgYGB7cn0KIyBjcmVhdGluZyBhIDN4MiBtYXRyaXgKbSA8LSBtYXRyaXgoYygxLCAyLCAzLCA0LCA1LCA2KSwgbmNvbCA9IDIpCm0KYGBgCmBgYHtyfQojIGV4dHJhY3RpbmcgdmFsdWVzIGZyb20gbWF0cml4ZXMKbVsxLCAxXQpgYGAKYGBge3J9Cm1bMywgMl0KYGBgCmBgYHtyfQojIGV4dHJhY3Rpbmcgcm93cwptWzEsIF0KYGBgCmBgYHtyfQojIGV4dHJhY3RpbmcgY29sdW1ucwptWywgMV0KYGBgCgo=