In base you can you use merge directly:
#Reading score table
df <- read.table(header = TRUE, text ="ACT   SAT
    36  1590
    35  1540
    34  1500
    33  1460
    32  1430
    31  1400
    30  1370
    29  1340
    28  1310
    27  1280")
#Setting seed to reproduce df1
set.seed(1234) 
# Create a data.frame with 50 sample scores
df1 <- data.frame(ACT_Composite = sample(27:36, 50, replace = TRUE))
# left-join df1 with df with keys ACT_Composite and ACT
result <- merge(df1, df,
            by.x = "ACT_Composite", 
            by.y = "ACT", 
            all.x = TRUE,
            sort = FALSE)
#The first 6 values of result 
head(result)
  ACT_Composite  SAT
1            31 1400
2            31 1400
3            31 1400
4            31 1400
5            31 1400
6            36 1590
In data.table you can you use merge
library(data.table)
#Setting seed to reproduce df1
set.seed(1234) 
# Create a data.table with 50 sample scores
df1 <- data.table(ACT_Composite = sample(27:36, 50, replace = TRUE)) 
# left-join df1 with df with keys ACT_Composite and ACT
result <- merge(df1, df, 
            by.x = "ACT_Composite", 
            by.y = "ACT", 
            all.x = TRUE,
            sort = FALSE)
#The first 6 values of result 
head(result) 
   ACT_Composite  SAT
1:            36 1590
2:            32 1430
3:            31 1400
4:            35 1540
5:            31 1400
6:            32 1430
Alternatively in data.table you can try also
df1 <- data.table(ACT_Composite = sample(27:36, 50, replace = TRUE))
setDT(df)# you need to convert your look-up table df into data.table 
result <- df[df1, on = c(ACT = "ACT_Composite")] 
head(result) 
   ACT_Composite  SAT
1:            36 1590
2:            32 1430
3:            31 1400
4:            35 1540
5:            31 1400
6:            32 1430