1

決められた期間内にリンゴを手に入れたユニークな人々を特定したいと考えています。これは、次のようにバイナリ インジケーター「りんご」を作成することで行いました。

names<-c("tom", "mary", "tom", "john", "mary", "tom", "john", "mary", "john", "mary", "tom", "mary", "john", "john")
dates<-as.Date(c("2010-02-01", "2010-05-01", "2010-03-01", "2010-07-01", "2010-07-01", "2010-06-01", "2010-09-01", "2010-07-01", "2010-11-01", "2010-09-01", "2010-08-01", "2010-11-01", "2010-12-01", "2011-01-01"))
fruit<-as.character(c("apple", "orange", "banana", "kiwi", "apple", "apple", "apple", "orange", "banana", "apple", "kiwi", "apple", "orange", "apple"))
age<-as.numeric(c(60,55,60,57,55,60,57,55,57,55,60,55, 57,57))
sex<-as.character(c("m","f","m","m","f","m","m", "f","m","f","m","f","m", "m"))
df<-data.frame(names,dates, age, sex, fruit)
df


df$apples<-ifelse(df$fruit=='apple' & df$dates>="2010-04-01" & df$dates<"2010-10-01",1,0)
df

 names      dates age sex  fruit apples
1    tom 2010-02-01  60   m  apple      0
2   mary 2010-05-01  55   f orange      0
3    tom 2010-03-01  60   m banana      0
4   john 2010-07-01  57   m   kiwi      0
5   mary 2010-07-01  55   f  apple      1
6    tom 2010-06-01  60   m  apple      1
7   john 2010-09-01  57   m  apple      1
8   mary 2010-07-01  55   f orange      0
9   john 2010-11-01  57   m banana      0
10  mary 2010-09-01  55   f  apple      1
11   tom 2010-08-01  60   m   kiwi      0
12  mary 2010-11-01  55   f  apple      0
13  john 2010-12-01  57   m orange      0
14  john 2011-01-01  57   m  apple      0

私の問題は、メアリーが 2 回そこにいることです。指定された期間内に彼女がリンゴを手に入れた最初の日付のみが必要です (実際のデータでは、他のすべての人の最初の日付)。「apples1」という名前の 2 番目の列が必要です。これは、各人が定義された期間内にリンゴを獲得した最初の日付にフラグを立てます。

望ましい出力:

 names      dates age sex  fruit apples apples1
1    tom 2010-02-01  60   m  apple      0       0
2   mary 2010-05-01  55   f orange      0       0
3    tom 2010-03-01  60   m banana      0       0
4   john 2010-07-01  57   m   kiwi      0       0
5   mary 2010-07-01  55   f  apple      1       1
6    tom 2010-06-01  60   m  apple      1       1
7   john 2010-09-01  57   m  apple      1       1
8   mary 2010-07-01  55   f orange      0       0
9   john 2010-11-01  57   m banana      0       0
10  mary 2010-09-01  55   f  apple      1       0
11   tom 2010-08-01  60   m   kiwi      0       0
12  mary 2010-11-01  55   f  apple      0       0
13  john 2010-12-01  57   m orange      0       0
14  john 2011-01-01  57   m  apple      0       0

私は検索してきましたが、最も近いのはこれです- R の列の一意の値ごとに最初の行のみを選択します。しかし、これは一意の ID には対応していません。私も !duplicated に出くわしましたが、彼女をフォローアップするために彼女の日付を残す必要があるため、メアリーのデータを削除したくありません。ここで本当に基本的なことが欠けている可能性があります。あらかじめお詫び申し上げます。

4

2 に答える 2