我有一个包含16列(变量)的大型数据框,我需要一种方法来根据条件减小其大小(记录数)。想知道这里是否有人知道如何在R中做到这一点。
我需要根据此清理文件。它包含以下列:“员工ID”,“年份”,“月份”和“终止”。变量“Termed”编码为0 =活动,1 = Termed。因此,每个“员工ID”有很多行(每年一个月,他们一直在公司工作,直到“终止”列中的值为“1”,或者没有更多的数据用于该特定“员工ID”(“终止”栏中的所有值均为“0”),在这种情况下,我需要保留最后一条记录。
总而言之,我需要以我刚刚拥有的方式清理文件,对于那些被终止的人(终止= 1),每个员工ID的终止= 1的记录以及从未对的人的最后记录终止(终止变量中的所有值都是“0”)。
有没有办法在R中这样做?感谢您的帮助。
答案 0 :(得分:0)
到罗马有很多方法。对于data.frames,这应该做:
# Generate some dummy data
employee_data <- data.frame(employee_id = c(rep(1,10),rep(2,10)), year = 1990, month = rep(1:10,2), termination = c(rep(0,10),rep(0,9),1))
# Order entries according to wishes
employee_data <- employee_data[with(employee_data, order(employee_id, -termination, -year, -month)), ]
# Select first rows per employee_id
employee_data[! duplicated(employee_data$employee_id), ]
employee_id year month termination
10 1 1990 10 0
20 2 1990 10 1
排序算法非常快,因此这也适用于非常大的数据集。
不严格相关:我会使用data.table包。语法更好,对大数据更好。