You simply could put a named vector v together with a list of your variables from mget into Map and subset it.
v <- c("Totally agree"=1, "Indifferent"=2, "Don't agree at all"=3)
Map(function(x, y) unname(y[x]), mget(ls(pattern="^item")), list(v))
# $item1
# [1] 3 1
#
# $item2
# [1] 2 1
Or, suppose you have a data frame like this one,
head(dat1)
# id item1 item2 x
# 1 1 Totally agree Totally agree 0.0356312
# 2 2 Totally agree Totally agree 1.3149588
# 3 3 Totally agree Indifferent 0.9781675
# 4 4 Totally agree Indifferent 0.8817912
# 5 5 Indifferent Indifferent 0.4822047
# 6 6 Indifferent Don't agree at all 0.9657529
then you may do this in a similar way. We may even simplify the code because we don't need the Map to return unnamed objects anymore.
v1 <- c("Totally agree"=1, "Indifferent"=2, "Don't agree at all"=3)
item_nm <- c("item1", "item2")
dat1[item_nm] <- Map(`[`, list(v1), dat2[item_nm])
dat1
# id item1 item2 x
# 1 1 1 1 0.0356312
# 2 2 1 1 1.3149588
# 3 3 1 2 0.9781675
# 4 4 1 2 0.8817912
# 5 5 2 2 0.4822047
# 6 6 2 3 0.9657529
# 7 7 2 3 -0.8145709
# 8 8 1 1 0.2839578
# 9 9 3 1 -0.1616986
# 10 10 3 3 1.9355718
The second argument gets recycled for each Map iteration (i.e. list(v1, v1) would also work).
And more generally, for each column you want to recode numerically, list one vector more in the second argument of Map.
head(dat2)
# id item1 item2 x
# 1 1 Totally agree Always 0.0356312
# 2 2 Totally agree Always 1.3149588
# 3 3 Totally agree Both 0.9781675
# 4 4 Totally agree Both 0.8817912
# 5 5 Indifferent Both 0.4822047
# 6 6 Indifferent Never 0.9657529
v2 <- c("Always"=1, "Both"=2, "Never"=3)
dat2[item_nm] <- Map(`[`, list(v1, v2), dat2[item_nm])
dat2
# id item1 item2 x
# 1 1 1 1 0.0356312
# 2 2 1 1 1.3149588
# 3 3 1 2 0.9781675
# 4 4 1 2 0.8817912
# 5 5 2 2 0.4822047
# 6 6 2 3 0.9657529
# 7 7 2 3 -0.8145709
# 8 8 1 1 0.2839578
# 9 9 3 1 -0.1616986
# 10 10 3 3 1.9355718
Data:
dat1 <- structure(list(id = 1:10, item1 = c("Totally agree", "Totally agree",
"Totally agree", "Totally agree", "Indifferent", "Indifferent",
"Indifferent", "Totally agree", "Don't agree at all", "Don't agree at all"
), item2 = c("Totally agree", "Totally agree", "Indifferent",
"Indifferent", "Indifferent", "Don't agree at all", "Don't agree at all",
"Totally agree", "Totally agree", "Don't agree at all"), x = c(0.0356311982051355,
1.31495884897891, 0.978167526364279, 0.881791226863203, 0.482204688262918,
0.965752878105794, -0.814570938270238, 0.283957806364306, -0.161698647607024,
1.93557176599585)), class = "data.frame", row.names = c(NA, -10L
))
dat2 <- structure(list(id = 1:10, item1 = c("Totally agree", "Totally agree",
"Totally agree", "Totally agree", "Indifferent", "Indifferent",
"Indifferent", "Totally agree", "Don't agree at all", "Don't agree at all"
), item2 = c("Always", "Always", "Both", "Both", "Both", "Never",
"Never", "Always", "Always", "Never"), x = c(0.0356311982051355,
1.31495884897891, 0.978167526364279, 0.881791226863203, 0.482204688262918,
0.965752878105794, -0.814570938270238, 0.283957806364306, -0.161698647607024,
1.93557176599585)), class = "data.frame", row.names = c(NA, -10L
))
paste0will act just likepaste(a,b, sep=""), i.e. pasting with no separators. - mhovd