If you want them to be two separate objects to use later than you could either put them in one reactive expression that returns a vector and access them like you would any other vector or create a reactive expressions for each one (my prefered way, just for clarity when someone else, or a later version of myself, has to look at the code and figure out what is going on). This is assuming that the rest of the books follow the same naming convention as 1_1.csv:
data_1 <- reactive({
if (input$x == "book1_name") {
# what you name the variable in here does not matter so long as you
# return it at the end of the reactive statement
# this is the case because reactive statements are functions that behave a certain way
out <- read.csv("1_1.csv")
} else if (input$x == "book2_name") {
out <- read.csv("2_1.csv")
} else out <- read.csv("3_1.csv") # assuming you actually only have three options
return(out)
})
You would then be able to access this variable in the rest of your server code as data_1(). You need to add the parentheses at the end becasue, as I mentioned in the comments, a reactive expression is a function. You can create data_2 in the exact same way.
FFR, it is much easier to give help if you post a minimal reproducible example. You question is fairly straight forward, assuming I understand it correctly, but posting the code that you have already tried and the errors that you are getting can help you get the answer you are looking for faster. You should check out the reprex package to help you make your examples.