删除R中的特定行

时间:2016-02-08 23:56:23

标签: r

一般来说,我知道如何删除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的所有行。

接下来,我必须做同样的事情来删除非最大月份。

我觉得我可以做到以上,但它非常麻烦。有一个更好的方法吗?谢谢。

1 个答案:

答案 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,]