2017-09-16 14 views
2

を持つ行のみを保持:私はこのようなものだデータフレームを持って、同じそれぞれの値

locID year effort1 effort2 
1 L1 2000  iii  A 
2 L1 2000  iii  B 
3 L1 2001  iv  A 
4 L1 2001  iii  A 
5 L2 2000  iv  B 
6 L2 2000  iii  B 
7 L2 2001  iii  A 
8 L2 2001  iii  B 

私は2000年と2001年からlocID年代のペアを持っているしたいが、私は持っているペアをしたいですeffort1effort2の両方に対して同じ値です。だから、このテストデータでは、私は行1,4,6,8を維持したいだけです。これはかなり複雑で、subset()の能力ではありません。助言がありますか?

locID year effort1 effort2 
1 L1 2000  iii  A 
4 L1 2001  iii  A 
6 L2 2000  iii  B 
8 L2 2001  iii  B 

答えて

2

上記1からマイ所望のデータフレームあなただけLOCID、effort1とeffort2が同意した行をしたいようです。あなたはduplicatedでそれを得ることができます。

D1 = which(duplicated(df[,c(1,3,4)])) 
D2 = which(duplicated(df[,c(1,3,4)], fromLast=TRUE)) 
Keep = sort(unique(c(D1, D2))) 

df[Keep,] 
    locID year effort1 effort2 
1 L1 2000  iii  A 
4 L1 2001  iii  A 
6 L2 2000  iii  B 
8 L2 2001  iii  B 

少し説明。 duplicatedは、重複行の最初のを除くすべてのインスタンスをにします。 duplicatedfromLast=TRUEと使用すると、最後のものを除くすべての複製がになります。これらをまとめてすべての複製を得ることができます。

0

溶液:dplyr

library(dplyr) 

dt2 <- dt %>% 
    group_by(locID, effort1, effort2) %>% 
    filter(n() > 1) 
dt2 
# A tibble: 4 x 4 
# Groups: locID, effort1, effort2 [2] 
    locID year effort1 effort2 
    <chr> <int> <chr> <chr> 
1 L1 2000  iii  A 
2 L1 2001  iii  A 
3 L2 2000  iii  B 
4 L2 2001  iii  B 

DATA

dt <- read.table(text = " locID year effort1 effort2 
1 L1 2000  iii  A 
       2 L1 2000  iii  B 
       3 L1 2001  iv  A 
       4 L1 2001  iii  A 
       5 L2 2000  iv  B 
       6 L2 2000  iii  B 
       7 L2 2001  iii  A 
       8 L2 2001  iii  B", 
       header = TRUE, stringsAsFactors = FALSE) 
関連する問題