1. Load Libraries

suppressMessages(library(data.table))
suppressMessages(library(dplyr))
suppressMessages(library(tidyr))
#library(magrittr)

2.Data Import & Column Labeling

2a. Data imports

mushdata <- fread("mush.data", header = FALSE)
keydata <- fread("key.csv", header = TRUE)
mushlabels <- as.character(fread("keycolumns.csv", header = FALSE))

2b. Add Column Names

names(mushdata) <- mushlabels
names(mushdata)
 [1] "edible?"                  "cap-shape"                "cap-surface"             
 [4] "cap-color"                "bruises?"                 "odor"                    
 [7] "gill-attachment"          "gill-spacing"             "gill-size"               
[10] "gill-color"               "stalk-shape"              "stalk-root"              
[13] "stalk-surface-above-ring" "stalk-surface-below-ring" "stalk-color-above-ring"  
[16] "stalk-color-below-ring"   "veil-type"                "veil-color"              
[19] "ring-number"              "ring-type"                "spore-print-color"       
[22] "population"               "habitat"                 

3. Add Data Labels

#warning: Reloading packages may induce an error when running the following code.
#Based on method posted by Jaap Walhout on Stackoverflow (https://stackoverflow.com/questions/49213691/replacing-data-frame-content-with-values-from-another-table-using-matching-colum?rq=1)
mushfinal <- mushdata %>% gather(keycat, letterkey) %>% left_join(., keydata) %>% select(-letterkey) %>% group_by(keycat) %>% mutate(r = row_number()) %>% spread(keycat, keylabel) %>% select(-r)
Joining, by = c("keycat", "letterkey")
head(mushfinal)

Create a Subset

mushsubset1 <- subset(mushfinal, select=c('edible?','gill-attachment','gill-spacing','gill-size','gill-color'))
head(mushsubset1)
LS0tDQp0aXRsZTogIldlZWsgMSBBc3NpZ25tZW50Ig0Kc3VidGl0bGU6ICJEQVRBLTYwNywgU3ByaW5nIDIwMTkiDQphdXRob3I6ICJGZXJuYW5kbyBGaWd1ZXJlcyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCg0KIzEuIExvYWQgTGlicmFyaWVzDQpgYGB7ciBMb2FkIExpYnJhcmllc30NCnN1cHByZXNzTWVzc2FnZXMobGlicmFyeShkYXRhLnRhYmxlKSkNCnN1cHByZXNzTWVzc2FnZXMobGlicmFyeShkcGx5cikpDQpzdXBwcmVzc01lc3NhZ2VzKGxpYnJhcnkodGlkeXIpKQ0KYGBgDQoNCiMyLkRhdGEgSW1wb3J0ICYgQ29sdW1uIExhYmVsaW5nDQoNCiMjMmEuIERhdGEgaW1wb3J0cw0KDQpgYGB7ciBJbXBvcnQgZGF0YSBhbmQga2V5c30NCm11c2hkYXRhIDwtIGZyZWFkKCJtdXNoLmRhdGEiLCBoZWFkZXIgPSBGQUxTRSkNCmtleWRhdGEgPC0gZnJlYWQoImtleS5jc3YiLCBoZWFkZXIgPSBUUlVFKQ0KbXVzaGxhYmVscyA8LSBhcy5jaGFyYWN0ZXIoZnJlYWQoImtleWNvbHVtbnMuY3N2IiwgaGVhZGVyID0gRkFMU0UpKQ0KYGBgDQoNCiMjMmIuIEFkZCBDb2x1bW4gTmFtZXMNCg0KYGBge3IgQWRkIGNvbHVtbiBsYWJlbHMgdG8gZGF0YSB9DQpuYW1lcyhtdXNoZGF0YSkgPC0gbXVzaGxhYmVscw0KbmFtZXMobXVzaGRhdGEpDQpgYGANCg0KDQojMy4gQWRkIERhdGEgTGFiZWxzDQoNCmBgYHtyIDUuIFVwZGF0ZSB2YWx1ZXMgd2l0aCBsYWJlbHN9DQojd2FybmluZzogUmVsb2FkaW5nIHBhY2thZ2VzIG1heSBpbmR1Y2UgYW4gZXJyb3Igd2hlbiBydW5uaW5nIHRoZSBmb2xsb3dpbmcgY29kZS4NCg0KI0Jhc2VkIG9uIG1ldGhvZCBwb3N0ZWQgYnkgSmFhcCBXYWxob3V0IG9uIFN0YWNrb3ZlcmZsb3cgKGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ5MjEzNjkxL3JlcGxhY2luZy1kYXRhLWZyYW1lLWNvbnRlbnQtd2l0aC12YWx1ZXMtZnJvbS1hbm90aGVyLXRhYmxlLXVzaW5nLW1hdGNoaW5nLWNvbHVtP3JxPTEpDQoNCm11c2hmaW5hbCA8LSBtdXNoZGF0YSAlPiUgZ2F0aGVyKGtleWNhdCwgbGV0dGVya2V5KSAlPiUgbGVmdF9qb2luKC4sIGtleWRhdGEpICU+JSBzZWxlY3QoLWxldHRlcmtleSkgJT4lIGdyb3VwX2J5KGtleWNhdCkgJT4lIG11dGF0ZShyID0gcm93X251bWJlcigpKSAlPiUgc3ByZWFkKGtleWNhdCwga2V5bGFiZWwpICU+JSBzZWxlY3QoLXIpDQoNCmBgYA0KDQpgYGB7cn0NCmhlYWQobXVzaGZpbmFsKQ0KYGBgDQoNCiNDcmVhdGUgYSBTdWJzZXQNCg0KYGBge3IgNi4gU3Vic2V0LCB3b3Jrcywga2VlcHMgbGFiZWxzfQ0KbXVzaHN1YnNldDEgPC0gc3Vic2V0KG11c2hmaW5hbCwgc2VsZWN0PWMoJ2VkaWJsZT8nLCdnaWxsLWF0dGFjaG1lbnQnLCdnaWxsLXNwYWNpbmcnLCdnaWxsLXNpemUnLCdnaWxsLWNvbG9yJykpDQpgYGANCg0KYGBge3J9DQpoZWFkKG11c2hzdWJzZXQxKQ0KYGBg