使用 R 中另一个数据框列的索引替换数据框值

时间:2021-05-28 14:47:57

标签: r

这是我经常遇到的事情,这是我通常采用的解决方案。我想知道是否有人对完成此任务的不太冗长的方法有任何建议。在这里,我创建了一个包含三列的示例数据框。其中一列是参数代码而不是参数名称。

其次,我创建了一个包含唯一参数代码和相关参数名称的参考数据帧示例。

我的解决方案是使用“for”循环将 real_param_names 中的参数名称与 dat 中的关联参数代码进行匹配。我曾尝试使用 match()replace,但还没有完全找到它们的工作方式。我在旧问题中遇到的所有例子都没有达到标准,但很高兴提到一个做到这一点。提前致谢。

dat <- data.frame(site = c(1,1,2,2,3,3,4,4),
                  param_code = c('a','b','c','d','a','b','c','d'),
                  param_name = NA)
dat

real_param_names <- data.frame(param_code = c('a','b','c','d'),
                               param_name = c('gold', 'silver', 'mercury', 'lead'))
real_param_names

for (i in unique(dat$param_code)) {
  dat$param_name[dat$param_code==i] <- real_param_names$param_name[real_param_names$param_code==i]
}
dat

1 个答案:

答案 0 :(得分:1)

这是一个合并/加入操作:

首先,让我们去掉不必要的 dat$param_name,因为它会在合并中被引入:

dat$param_name <- NULL
dat
#   site param_code
# 1    1          a
# 2    1          b
# 3    2          c
# 4    2          d
# 5    3          a
# 6    3          b
# 7    4          c
# 8    4          d

现在合并:

merge(dat, real_param_names, by = "param_code", all.x = TRUE)
#   param_code site param_name
# 1          a    1       gold
# 2          a    3       gold
# 3          b    1     silver
# 4          b    3     silver
# 5          c    2    mercury
# 6          c    4    mercury
# 7          d    2       lead
# 8          d    4       lead

连接/合并概念的一些很好的链接:How to join (merge) data frames (inner, outer, left, right)https://stackoverflow.com/a/6188334/3358272