一般来说,我知道如何删除R中的行。但是,对于这个特殊要求,我不确定如何继续。以下是我需要对数据做什么的想法:
ID MONTH INCOME
1. 00000012 6 60
2. 00000012 8 65
3. 00000015 12 70
4. 00000025 4 45
5. 00000025 8 60
6. 00000032 6 10
7. 00000035 6 30
每栏的快速说明:
ID的前7位数字标识代理商。因此,在第一行中,00000012表示代理1.最后一位是面试编号。因此,在第三行中,00000015表示代理1,访谈5.
月份和收入很简单。
必须做什么
我需要删除不包括第二次和第五次访谈的每个ID。
我只需要最大值。第二次面试的月份,以及每个ID的第五次面试。
所以,如果我正确地清理了数据,我会:
ID MONTH INCOME
2. 00000012 8 65
3. 00000015 12 70
6. 00000032 6 10
7. 00000035 6 30
通知第4,5行已经消失,因为代理商2没有第二次面试。第1行已经消失,因为代理商1,面试2的月份较高。
我目前的想法如何做到这一点似乎过于复杂。我想把ID分成两列,一列是前7位,另一列是最后一位。然后,循环遍历整个数据,并在每一行运行另一个循环,以查看对应于该行的ID是否同时具有面试2和面试5.如果确实如此,那很好。如果没有,那么我必须删除具有该ID的所有行。
接下来,我必须做同样的事情来删除非最大月份。
我觉得我可以做到以上,但它非常麻烦。有一个更好的方法吗?谢谢。
答案 0 :(得分:0)
你可以这样做:
library(stringi)
Agents <- substr(df$ID,1,nchar(df$ID)-1 )
A2 <- stri_endswith_fixed(df$ID,"2", fixed = T)
A5 <- stri_endswith_fixed(df$ID,"5", fixed = T)
A2and5 <- intersect(Agents[A5], Agents[A2])
df[Agents %in% A2and5,]