管理未在 R 中作为重复项输入的重复项
Managing duplicates that are not entered as duplicates in R
我有一个来自国家机构的数据集,我正在尝试清理它。一个障碍是标题没有输入标准(例如,DIR、DIRECTOR、DIR.,都是允许的输入)。另一个障碍是一个人可能有多个职位,但只输入其中一个。
例如,考虑下面的员工 #1 (Emp_1)。这个人是教员。他们年复一年地教书。但在2015年,除了教学工作,他们还接了一些属于non-faculty,免除的工作。但他们的“真正”分类是教师。在此示例中,已为 Emp_1 提供了两条记录。我做了一个快速的 grep 来创建一个名为“job.cat”的新分类,它有助于识别教师。但是在下面的 Emp_1 和 Emp_4 的情况下,您可以看到它们被错误分类为“non-faculty”。
现在,我可以为“STIPEND/COORD FAC,EXMT EMP”做一个 grep,并将其也算作教师,但有些人从不教书,而且总是“STIPEND/COORD FAC,EXMT EMP”,所以应该算作 non-faculty.
为了解决这个问题,我想我应该创建第二个数据集,包括姓名、职位和职位类别,清理它,然后将它合并回下面我将使用 employee_name 和正确的工作。猫。
但我想知道是否有更好的方法使用类应用函数、ifelse 或 for-loop 来执行此操作。
d <- read.table(text = 'employee_name job_title Salary_2012 Salary_2013 Salary_2014 Salary_2015 job.cat
Emp_1 FACULTY 31200 37400 33300 NA Faculty
Emp_1 "STIPEND/COORD FAC,EXMT EMP" NA NA NA 37300 Non-fac
Emp_2 FACULTY 29300 28400 31800 NA Faculty
Emp_2 "PART TIME FACULTY" NA NA NA 30800 Faculty
Emp_3 FACULTY NA NA 4300 NA Faculty
Emp_4 FACULTY 50000 59900 31300 NA Faculty
Emp_4 "STIPEND/COORD FAC,EXMT EMP" NA NA NA 22000 Non-fac', header = TRUE)
我认为您可以通过按 employee_name
对结果进行分组来解决此问题,检查该员工是否有任何教师职位,然后将其定义为教师:
library(dplyr)
d %>%
group_by(employee_name) %>%
mutate(job.cat = ifelse(any(grep("FACULTY",job_title)),"Faculty", "Non-fac"))
您的其他问题可能有类似的解决方案:
d %>%
group_by(employee_name) %>%
mutate(job_title = ifelse(any(grep("DIR",job_title)),"Director", job_title))
我有一个来自国家机构的数据集,我正在尝试清理它。一个障碍是标题没有输入标准(例如,DIR、DIRECTOR、DIR.,都是允许的输入)。另一个障碍是一个人可能有多个职位,但只输入其中一个。
例如,考虑下面的员工 #1 (Emp_1)。这个人是教员。他们年复一年地教书。但在2015年,除了教学工作,他们还接了一些属于non-faculty,免除的工作。但他们的“真正”分类是教师。在此示例中,已为 Emp_1 提供了两条记录。我做了一个快速的 grep 来创建一个名为“job.cat”的新分类,它有助于识别教师。但是在下面的 Emp_1 和 Emp_4 的情况下,您可以看到它们被错误分类为“non-faculty”。 现在,我可以为“STIPEND/COORD FAC,EXMT EMP”做一个 grep,并将其也算作教师,但有些人从不教书,而且总是“STIPEND/COORD FAC,EXMT EMP”,所以应该算作 non-faculty.
为了解决这个问题,我想我应该创建第二个数据集,包括姓名、职位和职位类别,清理它,然后将它合并回下面我将使用 employee_name 和正确的工作。猫。 但我想知道是否有更好的方法使用类应用函数、ifelse 或 for-loop 来执行此操作。
d <- read.table(text = 'employee_name job_title Salary_2012 Salary_2013 Salary_2014 Salary_2015 job.cat
Emp_1 FACULTY 31200 37400 33300 NA Faculty
Emp_1 "STIPEND/COORD FAC,EXMT EMP" NA NA NA 37300 Non-fac
Emp_2 FACULTY 29300 28400 31800 NA Faculty
Emp_2 "PART TIME FACULTY" NA NA NA 30800 Faculty
Emp_3 FACULTY NA NA 4300 NA Faculty
Emp_4 FACULTY 50000 59900 31300 NA Faculty
Emp_4 "STIPEND/COORD FAC,EXMT EMP" NA NA NA 22000 Non-fac', header = TRUE)
我认为您可以通过按 employee_name
对结果进行分组来解决此问题,检查该员工是否有任何教师职位,然后将其定义为教师:
library(dplyr)
d %>%
group_by(employee_name) %>%
mutate(job.cat = ifelse(any(grep("FACULTY",job_title)),"Faculty", "Non-fac"))
您的其他问题可能有类似的解决方案:
d %>%
group_by(employee_name) %>%
mutate(job_title = ifelse(any(grep("DIR",job_title)),"Director", job_title))