2017-10-05 29 views
-2

我有這種形式的數據框;通過檢查是否在R中有多個值來刪除行

Year Department Jan  Feb ................... Dec 
2017 TF   15.15 225.51 .............. 5562.1 
2015 CIF  ................................... 
2013 TTR  .................................... 
2011 COR  .................... 
. ............................. 
.  ...................... 

作爲總結,我想創建一個算法,但首先我必須做出這個過濾:

  • 如果一個部門沒有對2013年,2014年,2015年2016年值,我想從我的數據集中排除該部門。

  • 換句話說,通過讀取每個部門的數據,過濾數據的部門在四個月的所有四個值的列。

我試過存在,is.na但多重過濾總是失敗。而另一個障礙是過濾器只適用於單一條件,但在這裏我需要4個條件。 4年的價值必須存在下一步使用它們。

謝謝。

+0

歡迎SO。本網站不是代碼編寫服務,不適用於提供完整的解決方案。預計用戶將展示一些努力和代碼,而SO在此期間將幫助您解決具體的編程問題。你有沒有嘗試過任何東西?請閱讀:https://stackoverflow.com/help/asking –

回答

0

我不能找到一個明確的重複了這個問題。似乎是一個快速修復與group_by

library(dplyr) 
df <- data_frame(Year = c(2013:2016, 2015, 2016), 
      Department = c(rep('TF', 4), 'CIF', 'TTR')) 

df 
#> # A tibble: 6 x 2 
#> Year Department 
#> <dbl>  <chr> 
#> 1 2013   TF 
#> 2 2014   TF 
#> 3 2015   TF 
#> 4 2016   TF 
#> 5 2015  CIF 
#> 6 2016  TTR 

df %>% 
    group_by(Department) %>% 
    mutate(x = Year %in% c(2013:2016), 
     y = sum(x)) %>% 
    ungroup() %>% 
    filter(y == 4) 
#> # A tibble: 4 x 4 
#> Year Department  x  y 
#> <dbl>  <chr> <lgl> <int> 
#> 1 2013   TF TRUE  4 
#> 2 2014   TF TRUE  4 
#> 3 2015   TF TRUE  4 
#> 4 2016   TF TRUE  4 
+0

謝謝,它爲我工作 –

0

使用R基本的溶液:

df = read.table(text = "Year, Department 
2016,TF 
2017,TF 
2013,CIF 
2014,CIF 
2015,CIF 
2016,CIF 
2013,TTR", header = TRUE, sep = ",", stringsAsFactors = FALSE) 

df[df$Department %in% subset(aggregate(subset(df, Year %in% c(2013,2014,2015,2016)), by=list(n$Department), FUN=length), Department==4)[,1], ] 

輸出:

Year Department 
3 2013  CIF 
4 2014  CIF 
5 2015  CIF 
6 2016  CIF 
相關問題