一般来说,我知道如何删除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 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的行。
接下来,我要做一件类似的事情来删除非最长月份。
我觉得我可以做上面的事,但是很麻烦。有更好的方法吗?谢谢。
发布于 2016-02-09 00:14:22
你可以这样做:
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,]
https://stackoverflow.com/questions/35281572
复制相似问题