我正在处理调查表中的大型数据集,该调查表在某些列而不是所有列中包含编码的回答。我希望将编码的回答替换为实际值。键/字典存储在另一个数据库中。复杂的因素是不同的问题(在原始数据集中存储为列)使用相同的代码(通常为数字),但代码根据列(问题)具有不同的含义。
如何使用与字典表中存储的相应键不同的值替换原始数据集中的编码值,但要使用特定的列名(也存储在字典表中)?
下面是原始数据集和字典表的示例,以及所需的结果。
original <- data.frame(
name = c('Jane','Mary','John', 'Billy'),
home = c(1,3,4,2),
car = c('b','b','a','b'),
shirt = c(3,2,1,1),
shoes = c('Black','Black','Black','Brown')
)
keymap <- data.frame(
column_name=c('home','home','home','home','car','car','shirt','shirt','shirt'),
value_old=c('1','2','3','4','a','b','1','2','3'),
value_new=c('Single family','Duplex','Condo','Apartment','Sedan','SUV','White','Red','Blue')
)
result <- data.frame(
name = c('Jane','Mary','John', 'Billy'),
home = c('Single family','Condo','Apartment','Duplex'),
car = c('SUV','SUV','Sedan','SUV'),
shirt = c('Blue','Red','White','White'),
shoes = c('Black','Black','Black','Brown')
)
> original
name home car shirt shoes
1 Jane 1 b 3 Black
2 Mary 3 b 2 Black
3 John 4 a 1 Black
4 Billy 2 b 1 Brown
> keymap
column_name value_old value_new
1 home 1 Single family
2 home 2 Duplex
3 home 3 Condo
4 home 4 Apartment
5 car a Sedan
6 car b SUV
7 shirt 1 White
8 shirt 2 Red
9 shirt 3 Blue
> result
name home car shirt shoes
1 Jane Single family SUV Blue Black
2 Mary Condo SUV Red Black
3 John Apartment Sedan White Black
4 Billy Duplex SUV White Brown
我尝试过使用dplyr的不同方法,但是没有取得很大进展,因为我对mutate/join语法没有很好的理解。
2条答案
按热度按时间4c8rllxm1#
我们可以循环
original
中的"keymap"的"column_name"列中的unique
值,将与列名匹配的keymap
(cur_column()
)作为子集,选择列2和3,deframe
到命名向量,并与该列的值匹配以进行替换或
base R
中的方法ehxuflar2#
请检查下面的代码,我们可以使用
factor
将一列中的值替换为另一个 Dataframe 中的数据,在本例中为keymap
创建于2023年2月4日,使用reprex v2.0.2