当分配规则存储在另一个tibble中时,如何用新值替换tibble中的数据?
Posted
技术标签:
【中文标题】当分配规则存储在另一个tibble中时,如何用新值替换tibble中的数据?【英文标题】:How to replace data in tibble with new values when the assignment rule is stored in another tibble? 【发布时间】:2021-12-20 07:01:05 【问题描述】:我有一些数据。但是假设该数据的值被新值覆盖/替换。分配规则也存储在 tibble 中。 数据栏:
library(tidyverse)
old_data <- tibble(
var1 = c(2,2,5,4,9,7,8,9,2),
var2 = c(9,2,7,5,5,8,4,9,9)
)
带有分配规则信息的小标题:
assignment_rule <- tibble(
new = c(1,2,3,4,5,6),
old = c(2,4,5,7,8,9)
)
我知道我可以通过将每个旧号码分别分配给新号码来解决这个例子,例如:
new_data <- old_data
new_data[new_data == 2] <- 1
new_data[new_data == 4] <- 2
new_data[new_data == 5] <- 3
new_data[new_data == 7] <- 4
new_data[new_data == 8] <- 5
new_data[new_data == 9] <- 6
但我确信有一种更优雅的方法可以做到这一点。尤其适用于处理更大的数据。
非常感谢您的帮助。
【问题讨论】:
【参考方案1】:使用命名向量进行匹配和重新编码
library(dplyr)
library(tibble)
new_data <- old_data %>%
mutate(across(everything(),
~deframe(assignment_rule[2:1])[as.character(.)]))
-输出
new_data
# A tibble: 9 × 2
var1 var2
<dbl> <dbl>
1 1 6
2 1 1
3 3 4
4 2 3
5 6 3
6 4 5
7 5 2
8 6 6
9 1 6
【讨论】:
以上是关于当分配规则存储在另一个tibble中时,如何用新值替换tibble中的数据?的主要内容,如果未能解决你的问题,请参考以下文章
删除 index.php 并处理两个 Codeigniter 站点的子域,当一个在另一个站点中时