Vectors

# create vectors of data for three medical patients
subject_name <- c("Joe Doe", "Mary Doe", "Steve Stevens")
temperature <- c(97.1, 96.1, 100.2)
flu_status <- c(FALSE, FALSE, TRUE)
# access the second element in the body temperature vector
temperature[2]
[1] 96.1
# access the third element in the body subject_name vector
subject_name[2]
[1] "Mary Doe"

Examples of accessing items in vectors

# include items in the range 2 to 3
temperature[2:3]
[1]  96.1 100.2
# exclude item 2 using the minus sign
temperature[-2]
[1]  97.1 100.2
# use a vector to indicate whether to include item
temperature[c(TRUE, TRUE, TRUE)]
[1]  97.1  96.1 100.2

Factors

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

Lists

# display information for a patient
subject_name[1]
[1] "Joe Doe"
temperature[1]
[1] 97.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 a 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])
subject1
$fullname
[1] "Joe Doe"

$temperature
[1] 97.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 accessing a list

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

$flu_status
[1] FALSE

Access a list like a vector

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

$flu_status
[1] FALSE

Data Frames Create a data frame from medical patient data

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

#display the data frame
pt_data

Accessing a data frame

#get a single column
pt_data$subject_name
[1] "Joe Doe"       "Mary Doe"      "Steve Stevens"
#get several columns by specifying a vector of names
pt_data[c("temperature", "flu_status")]
# this is the same as above, extracting temprature and flu_status
pt_data[2:3] #refers to columns
# accesing by row and column
pt_data[1,2]
[1] 97.1
# accessing several rows and several columns using vectors
pt_data[c(1,3), c(2,4)] # x,y

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

# column 1, all rows
pt_data[, 1]
[1] "Joe Doe"       "Mary Doe"      "Steve Stevens"
# row 1 and all columns
pt_data[1, ]
# all rows and all columns
pt_data[ , ]
# or simply display the entire dataset
pt_data
#the following are equivalent
pt_data[c(1,3), c("temperature", "gender")]
pt_data[-2, c(-1, -3, -5, -6)] #by exclusion
# 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")]

Matrices

# create a 2x2 matrix
m <- matrix(c(1,2,3,4), nrow=2)
m
     [,1] [,2]
[1,]    1    3
[2,]    2    4
#equivalent to above
m <- matrix(c(1,2,3,4), ncol=2)
m
     [,1] [,2]
[1,]    1    3
[2,]    2    4
# create a 2x3 matrix
m <- matrix(c(1,5,8,6,9,3), ncol=3)
m
     [,1] [,2] [,3]
[1,]    1    8    9
[2,]    5    6    3
# create a 3x2 matrix
m1 <- matrix(c(4,5,8,6,9,3), ncol = 2)
m1
     [,1] [,2]
[1,]    4    6
[2,]    5    9
[3,]    8    3
#extract values from matrices
m[1,1]
[1] 1
m1[3,2]
[1] 3
# extract the first row
m[1, ]
[1] 1 8 9
# extract the second column
m1[ ,2]
[1] 6 9 3
LS0tDQp0aXRsZTogIlIgZGF0YSBzdHJ1Y3R1cmVzIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KVmVjdG9ycw0KYGBge3J9DQojIGNyZWF0ZSB2ZWN0b3JzIG9mIGRhdGEgZm9yIHRocmVlIG1lZGljYWwgcGF0aWVudHMNCnN1YmplY3RfbmFtZSA8LSBjKCJKb2UgRG9lIiwgIk1hcnkgRG9lIiwgIlN0ZXZlIFN0ZXZlbnMiKQ0KdGVtcGVyYXR1cmUgPC0gYyg5Ny4xLCA5Ni4xLCAxMDAuMikNCmZsdV9zdGF0dXMgPC0gYyhGQUxTRSwgRkFMU0UsIFRSVUUpDQpgYGANCg0KYGBge3J9DQojIGFjY2VzcyB0aGUgc2Vjb25kIGVsZW1lbnQgaW4gdGhlIGJvZHkgdGVtcGVyYXR1cmUgdmVjdG9yDQp0ZW1wZXJhdHVyZVsyXQ0KYGBgDQoNCmBgYHtyfQ0KIyBhY2Nlc3MgdGhlIHRoaXJkIGVsZW1lbnQgaW4gdGhlIGJvZHkgc3ViamVjdF9uYW1lIHZlY3Rvcg0Kc3ViamVjdF9uYW1lWzJdDQpgYGANCg0KDQpFeGFtcGxlcyBvZiBhY2Nlc3NpbmcgaXRlbXMgaW4gdmVjdG9ycw0KYGBge3J9DQojIGluY2x1ZGUgaXRlbXMgaW4gdGhlIHJhbmdlIDIgdG8gMw0KdGVtcGVyYXR1cmVbMjozXQ0KYGBgDQpgYGB7cn0NCiMgZXhjbHVkZSBpdGVtIDIgdXNpbmcgdGhlIG1pbnVzIHNpZ24NCnRlbXBlcmF0dXJlWy0yXQ0KYGBgDQpgYGB7cn0NCiMgdXNlIGEgdmVjdG9yIHRvIGluZGljYXRlIHdoZXRoZXIgdG8gaW5jbHVkZSBpdGVtDQp0ZW1wZXJhdHVyZVtjKFRSVUUsIFRSVUUsIFRSVUUpXQ0KYGBgDQpGYWN0b3JzDQpgYGB7cn0NCiMgYWRkIGEgZ2VuZGVyIGZhY3Rvcg0KZ2VuZGVyIDwtIGZhY3RvcihjKCJNQUxFIiwgIkZFTUFMRSIsICJNQUxFIikpDQpnZW5kZXINCmBgYA0KYGBge3J9DQojIGFkZCBhIGJsb29kIHR5cGUgZmFjdG9yDQpibG9vZCA8LSBmYWN0b3IoYygiTyIsICJBIiwgIkFCIiksDQogICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiQSIsICJCIiwgIkFCIiwgIk8iKSkNCmJsb29kDQpgYGANCg0KYGBge3J9DQojQWRkIG9yZGVyZWQgZmFjdG9yDQpzeW1wdG9tcyA8LSBmYWN0b3IoYygiU0VWRVJFIiwgIk1JTEQiLCAiTU9ERVJBVEUiKSwNCiAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJNSUxEIiwgIk1PREVSQVRFIiwgIlNFVkVSRSIpLA0KICAgICAgICAgICAgICAgICAgIG9yZGVyZWQgPSBUUlVFKQ0Kc3ltcHRvbXMNCmBgYA0KDQpgYGB7cn0NCiMgY2hlY2sgZm9yIHN5bXB0b21zIGdyZWF0ZXIgdGhhbiBtb2RlcmF0ZQ0Kc3ltcHRvbXMgPiAiTU9ERVJBVEUiDQpgYGANCg0KTGlzdHMNCmBgYHtyfQ0KIyBkaXNwbGF5IGluZm9ybWF0aW9uIGZvciBhIHBhdGllbnQNCnN1YmplY3RfbmFtZVsxXQ0KYGBgDQoNCmBgYHtyfQ0KdGVtcGVyYXR1cmVbMV0NCmBgYA0KDQpgYGB7cn0NCmZsdV9zdGF0dXNbMV0NCmBgYA0KYGBge3J9DQpnZW5kZXJbMV0NCmBgYA0KYGBge3J9DQpibG9vZFsxXQ0KYGBgDQoNCmBgYHtyfQ0Kc3ltcHRvbXNbMV0NCmBgYA0KDQpgYGB7cn0NCiMgY3JlYXRlIGEgbGlzdCBmb3IgYSBwYXRpZW50DQpzdWJqZWN0MSA8LSBsaXN0KGZ1bGxuYW1lID0gc3ViamVjdF9uYW1lWzFdLA0KICAgICAgICAgICAgICAgICB0ZW1wZXJhdHVyZSA9IHRlbXBlcmF0dXJlWzFdLA0KICAgICAgICAgICAgICAgICBmbHVfc3RhdHVzID0gZmx1X3N0YXR1c1sxXSwNCiAgICAgICAgICAgICAgICAgZ2VuZGVyID0gZ2VuZGVyWzFdLA0KICAgICAgICAgICAgICAgICBibG9vZCA9IGJsb29kWzFdLA0KICAgICAgICAgICAgICAgICBzeW1wdG9tcyA9IHN5bXB0b21zWzFdKQ0Kc3ViamVjdDENCmBgYA0KDQpNZXRob2RzIGZvciBhY2Nlc3NpbmcgYSBsaXN0DQpgYGB7cn0NCiMgZ2V0IGEgc2luZ2xlIGxpc3QgdmFsdWUgYnkgcG9zaXRpb24gKHJldHVybnMgYSBzdWItbGlzdCkNCnN1YmplY3QxWzJdDQpgYGANCmBgYHtyfQ0KIyBnZXQgYSBzaW5nbGUgbGlzdCB2YWx1ZSBieSBwb3NpdGlvbiAocmV0dXJucyBhIG51bWVyaWMgdmVjdG9yKQ0Kc3ViamVjdDFbWzJdXQ0KYGBgDQoNCmBgYHtyfQ0KIyBnZXQgYSBzaW5nbGUgbGlzdCB2YWx1ZSBieSBuYW1lDQpzdWJqZWN0MSR0ZW1wZXJhdHVyZQ0KYGBgDQpgYGB7cn0NCiMgZ2V0IHNldmVyYWwgbGlzdCBpdGVtcyBieSBzcGVjaWZ5aW5nIGEgdmVjdG9yIG9mIG5hbWVzDQpzdWJqZWN0MVtjKCJ0ZW1wZXJhdHVyZSIsICJmbHVfc3RhdHVzIildDQpgYGANCg0KQWNjZXNzIGEgbGlzdCBsaWtlIGEgdmVjdG9yDQpgYGB7cn0NCiMgZ2V0IHZhbHVlcyAyIGFuZCAzDQpzdWJqZWN0MVsyOjNdDQpgYGANCg0KRGF0YSBGcmFtZXMNCkNyZWF0ZSBhIGRhdGEgZnJhbWUgZnJvbSBtZWRpY2FsIHBhdGllbnQgZGF0YQ0KYGBge3J9DQpwdF9kYXRhIDwtIGRhdGEuZnJhbWUoc3ViamVjdF9uYW1lLCB0ZW1wZXJhdHVyZSwgZmx1X3N0YXR1cywgZ2VuZGVyLA0KICAgICAgICAgICAgICAgICAgICAgIGJsb29kLCBzeW1wdG9tcywgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQ0KDQojZGlzcGxheSB0aGUgZGF0YSBmcmFtZQ0KcHRfZGF0YQ0KYGBgDQoNCkFjY2Vzc2luZyBhIGRhdGEgZnJhbWUNCmBgYHtyfQ0KIyBnZXQgYSBzaW5nbGUgY29sdW1uDQpwdF9kYXRhJHN1YmplY3RfbmFtZQ0KYGBgDQpgYGB7cn0NCiMgZ2V0IHNldmVyYWwgY29sdW1ucyBieSBzcGVjaWZ5aW5nIGEgdmVjdG9yIG9mIG5hbWVzDQpwdF9kYXRhW2MoInRlbXBlcmF0dXJlIiwgImZsdV9zdGF0dXMiKV0NCmBgYA0KDQpgYGB7cn0NCiMgdGhpcyBpcyB0aGUgc2FtZSBhcyBhYm92ZSwgZXh0cmFjdGluZyB0ZW1wZXJhdHVyZSBhbmQgZmx1X3N0YXR1cw0KcHRfZGF0YVsyOjNdICNyZWZlcnMgdG8gY29sdW1ucw0KYGBgDQoNCmBgYHtyfQ0KIyBhY2Nlc2luZyBieSByb3cgYW5kIGNvbHVtbg0KcHRfZGF0YVsxLDJdDQpgYGANCg0KYGBge3J9DQojIGFjY2Vzc2luZyBzZXZlcmFsIHJvd3MgYW5kIHNldmVyYWwgY29sdW1ucyB1c2luZyB2ZWN0b3JzDQpwdF9kYXRhW2MoMSwzKSwgYygyLDQpXSAjIHgseQ0KYGBgDQoNCkxlYXZlIGEgcm93IG9yIGNvbHVtbiBibGFuayB0byBleHRyYWN0IGFsbCByb3dzIG9yIGNvbHVtbnMNCmBgYHtyfQ0KIyBjb2x1bW4gMSwgYWxsIHJvd3MNCnB0X2RhdGFbLCAxXQ0KYGBgDQpgYGB7cn0NCiMgcm93IDEgYW5kIGFsbCBjb2x1bW5zDQpwdF9kYXRhWzEsIF0NCmBgYA0KDQpgYGB7cn0NCiMgYWxsIHJvd3MgYW5kIGFsbCBjb2x1bW5zDQpwdF9kYXRhWyAsIF0NCmBgYA0KDQpgYGB7cn0NCiMgb3Igc2ltcGx5IGRpc3BsYXkgdGhlIGVudGlyZSBkYXRhc2V0DQpwdF9kYXRhDQpgYGANCg0KYGBge3J9DQojdGhlIGZvbGxvd2luZyBhcmUgZXF1aXZhbGVudA0KcHRfZGF0YVtjKDEsMyksIGMoInRlbXBlcmF0dXJlIiwgImdlbmRlciIpXQ0KYGBgDQpgYGB7cn0NCnB0X2RhdGFbLTIsIGMoLTEsIC0zLCAtNSwgLTYpXSAjYnkgZXhjbHVzaW9uDQpgYGANCmBgYHtyfQ0KIyBjcmVhdGluZyBhIENlbHNpdXMgdGVtcGVyYXR1cmUgY29sdW1uDQpwdF9kYXRhJHRlbXBfYyA8LSAocHRfZGF0YSR0ZW1wZXJhdHVyZSAtIDMyKSAqICg1LzkpDQpgYGANCg0KYGBge3J9DQojY29tcGFyaW5nIGJlZm9yZSBhbmQgYWZ0ZXINCnB0X2RhdGFbYygidGVtcGVyYXR1cmUiLCAidGVtcF9jIildDQpgYGANCg0KTWF0cmljZXMNCmBgYHtyfQ0KIyBjcmVhdGUgYSAyeDIgbWF0cml4DQptIDwtIG1hdHJpeChjKDEsMiwzLDQpLCBucm93PTIpDQptDQpgYGANCg0KYGBge3J9DQojZXF1aXZhbGVudCB0byBhYm92ZQ0KbSA8LSBtYXRyaXgoYygxLDIsMyw0KSwgbmNvbD0yKQ0KbQ0KYGBgDQoNCmBgYHtyfQ0KIyBjcmVhdGUgYSAyeDMgbWF0cml4DQptIDwtIG1hdHJpeChjKDEsNSw4LDYsOSwzKSwgbmNvbD0zKQ0KbQ0KYGBgDQpgYGB7cn0NCiMgY3JlYXRlIGEgM3gyIG1hdHJpeA0KbTEgPC0gbWF0cml4KGMoNCw1LDgsNiw5LDMpLCBuY29sID0gMikNCm0xDQpgYGANCg0KYGBge3J9DQojZXh0cmFjdCB2YWx1ZXMgZnJvbSBtYXRyaWNlcw0KbVsxLDFdDQpgYGANCmBgYHtyfQ0KbTFbMywyXQ0KYGBgDQpgYGB7cn0NCiMgZXh0cmFjdCB0aGUgZmlyc3Qgcm93DQptWzEsIF0NCmBgYA0KYGBge3J9DQojIGV4dHJhY3QgdGhlIHNlY29uZCBjb2x1bW4NCm0xWyAsMl0NCmBgYA0KDQo=