Reputation: 585
I want to replace mupltiple columns by merging another data.
For example: I have two data frames, I want to replace columns of dat2
by using dat1
.
set.seed(1234)
dat1 = data.frame(userId = c(1:10), value = sample(100, 10))
# userId value
# 1 1 84
# 2 2 29
# 3 3 27
# 4 4 19
# 5 5 23
# 6 6 31
# 7 7 99
# 8 8 15
# 9 9 4
# 10 10 20
dat2 = data.frame(var1 = 1:5, var2 = 10:6, var3 = sample(10, 5))
# var1 var2 var3
# 1 1 10 7
# 2 2 9 5
# 3 3 8 3
# 4 4 7 10
# 5 5 6 2
Expected output:
# > dat2
# var1 var2 var3
# 1 84 20 99
# 2 29 4 23
# 3 27 15 27
# 4 19 99 20
# 5 23 31 29
Upvotes: 1
Views: 77
Reputation: 886938
Another base R
option is
dat2[] <- with(dat1, setNames(value, userId)[as.matrix(dat2)])
dat2
# var1 var2 var3
#1 12 47 1
#2 62 99 83
#3 60 22 60
#4 61 1 47
#5 83 97 62
Upvotes: 0
Reputation: 79188
You can use unstack
and stack
unstack(transform(stack(dat2),n=dat1$value[match(values,dat1$userId)]),n~ind)
var1 var2 var3
1 12 47 1
2 62 99 83
3 60 22 60
4 61 1 47
5 83 97 62
Upvotes: 0
Reputation: 323226
Using lapply
with match
as.data.frame(lapply(dat2,FUN = function(x) dat1$value[match(x,dat1$userId)]))
var1 var2 var3
1 12 47 1
2 62 99 83
3 60 22 60
4 61 1 47
5 83 97 62
Upvotes: 3