2016-12-06 36 views
1

大家好我想知道這是否可能。我仍在探索。基於單詞組合的條件創建二進制標識符,用於篩選R

例如,我有這個數據集

Case  Date   Item 
1  2016-03-25  Alpha 
2  2016-03-25  Bravo 
3  2016-03-25  Charlie 
4  2016-03-25  Delta 
5  2016-03-31  Alpha 
6  2016-03-31  Echo 
7  2016-03-31  Falcon 

注意阿爾法數據集中出現兩次。根據日期,事情是,我只想標出阿爾法和布拉沃。注意:Alpha和Bravo,而不僅僅是Alpha。

爲了進一步說明這一點,我有這個特殊的代碼:

data %>% group_by(Date) %>% mutate(combiflag=grepl("Alpha|Bravo", Item)) 

這給

Case  Date   Item  combiflag 
1  2016-03-25  Alpha  TRUE 
2  2016-03-25  Bravo  TRUE 
3  2016-03-25  Charlie  FALSE 
4  2016-03-25  Delta  FALSE 
5  2016-03-31  Alpha  TRUE 
6  2016-03-31  Echo  FALSE 
7  2016-03-31  Falcon  FALSE 

我希望在2016年3月31日的阿爾法是假的,因爲它不匹配「阿爾法」和「布拉沃」的組合。

這種組合的原因是我試圖在不同時間研究這種特定的組合。一種快速的技術是可取的,因爲我預見自己將這個想法應用於大型數據集。

非常感謝提前。

+0

根據您的情況,第三和第四應爲TRUE,分辯? – akrun

回答

0

我們可以嘗試

data %>% 
    group_by(Date) %>% 
    mutate(combiflag=any(grepl("Alpha", Item)) & any(grepl("Bravo", Item))) 

或者也可以

data %>% 
    group_by(Date) %>% 
    mutate(combiflag= if(any(grepl("Alpha", Item)) & any(grepl("Bravo", Item))) 
          grepl("Alpha|Bravo", Item) else FALSE) 
# Case  Date Item combiflag 
# <int>  <chr> <chr>  <lgl> 
#1  1 2016-03-25 Alpha  TRUE 
#2  2 2016-03-25 Bravo  TRUE 
#3  3 2016-03-25 Charlie  FALSE 
#4  4 2016-03-25 Delta  FALSE 
#5  5 2016-03-31 Alpha  FALSE 
#6  6 2016-03-31 Echo  FALSE 
#7  7 2016-03-31 Falcon  FALSE 
+0

有趣的是,第二個爲我工作,但不是第一個......感謝您的快速反應! – bzzbzzRzzbzz

+1

any和grepl一起工作得很好! – bzzbzzRzzbzz