这是我经常遇到的事情,这是我通常采用的解决方案。我想知道是否有人对完成此任务的不太冗长的方法有任何建议。在这里,我创建了一个包含三列的示例数据框。其中一列是参数代码而不是参数名称。
其次,我创建了一个包含唯一参数代码和相关参数名称的参考数据帧示例。
我的解决方案是使用“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
答案 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