R通过合并另一个数据来替换多列

时间:2018-07-16 02:02:49

标签: r merge

我想通过合并另一个数据来替换多列。 例如:我有两个数据框,我想使用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 

3 个答案:

答案 0 :(得分:3)

lapplymatch一起使用

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)

您可以使用unstackstack

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