我想通过合并另一个数据来替换多列。
例如:我有两个数据框,我想使用dat2
来替换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
预期输出:
# > dat2
# var1 var2 var3
# 1 84 20 99
# 2 29 4 23
# 3 27 15 27
# 4 19 99 20
# 5 23 31 29
答案 0 :(得分:3)
将lapply
与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
答案 1 :(得分:0)
您可以使用unstack
和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
答案 2 :(得分:0)
另一个base R
选项是
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