我正在使用R来清理数据集。我的数据集的一部分看起来像:
record_id | organization | other_work_loc
1 12 CCC
2 12 AMG
3 12 TAO
4 1
5 2
6 7
other_work_loc是一个自由响应列,其中包含高度可变的条目。只有当organization = 12时才有数据。我想将organization和other_work_loc数据重新分类到一个列(org_cat)中,其中包含三个类别(1、2、3)。大多数other_work_loc数据将被重新分类为“3”。
dataset<- dataset %>% mutate(org_cat = case_when (organization == 1 | organization == 2 ~ '1',
organization >= 3 & organization <12 ~ '2',
other_work_loc == 'CCC' | other_work_loc == AMG ~ '3'))
这段代码可以工作,但是在'other_work_loc'中有100个自由响应。大多数将被重新分类为'3'。然而,22个需要被分类为'1'或'2',我想知道是否有比写出如何重新编码每个单独响应更优雅的方法?
1条答案
按热度按时间t1rydlwq1#
使用Excel或类似工具创建一个包含
organization
、other_work_loc
和newvar
列的数据框,其中最后两个是您的自由回答及其相应的数字替换值-基本上是一个查找表。我把我的命名为lut.csv
,它看起来像这样:我将你的dataframe命名为
df.csv
,在加载tidyverse
后,使用left_join
执行替换:要点:
other_work_loc
空白,它仍然能够成功地匹配到原始文件的那一行,只是基于organization
。newvar
使用NA。newvar
条目,而不是编写额外的case_when
代码行。