Rには次のようなデータフレームがあります。
| RIC | Date | Open |
|--------|---------------------|--------|
| S1A.PA | 2011-06-30 20:00:00 | 23.7 |
| ABC.PA | 2011-07-03 20:00:00 | 24.31 |
| EFG.PA | 2011-07-04 20:00:00 | 24.495 |
| S1A.PA | 2011-07-05 20:00:00 | 24.23 |
RICと日付の組み合わせに関して重複があるかどうかを知りたい。 Rにそのための関数はありますか?
最初の2つの列を関数duplicated
に渡すだけで、いつでも試すことができます。
duplicated(dat[,1:2])
データフレームがdat
であると仮定します。詳細については、コンソールで?duplicated
と入力して、duplicated
関数のヘルプファイルを参照してください。これにより、次の文が提供されます。
ベクトルまたはデータフレームのどの要素が小さい添え字を持つ要素の複製であるかを判別し、どの要素(行)が複製であるかを示す論理ベクトルを返します。
したがって、duplicated
は論理ベクトルを返し、これを使用してdat
のサブセットを抽出できます。
ind <- duplicated(dat[,1:2])
dat[ind,]
または、個別の割り当て手順をスキップして、単に次のように使用できます。
dat[duplicated(dat[,1:2]),]
dplyrはこの種のものにとても良いです:
library(dplyr)
yourDataFrame %>%
distinct(RIC, Date, .keep_all = TRUE)
( ".keep_allはオプションです。使用しない場合、重複排除された2列のみが返されます。使用すると、重複排除されたデータフレーム全体が返されます)
Dataset data.frameのColumns DateおよびStateの値に基づいて重複レコードを削除する場合:
#Indexes of the duplicate rows that will be removed:
duplicate_indexes <- which(duplicated(dataset[c('Date', 'State')]),)
duplicate_indexes
#new_uniq will contain unique dataset without the duplicates.
new_uniq <- dataset[!duplicated(dataset[c('Date', 'State')]),]
View(new_uniq)
あなたが探しているのは、複製された行のデータフレームを元のデータと同じ形式で返す方法だと思います。これを行うにはよりエレガントな方法がおそらくありますが、これは機能します。
dup <- data.frame(as.numeric(duplicated(df$var))) #creates df with binary var for duplicated rows
colnames(dup) <- c("dup") #renames column for simplicity
df2 <- cbind(df, dup) #bind to original df
df3 <- subset(df2, dup == 1) #subsets df using binary var for duplicated`
2つ(またはそれ以上)の列に基づいて重複にタグを付けるためのdplyr
オプションを次に示します。この場合、ric
およびdate
:
df <- data_frame(ric = c('S1A.PA', 'ABC.PA', 'EFG.PA', 'S1A.PA', 'ABC.PA', 'EFG.PA'),
date = c('2011-06-30 20:00:00', '2011-07-03 20:00:00', '2011-07-04 20:00:00', '2011-07-05 20:00:00', '2011-07-03 20:00:00', '2011-07-04 20:00:00'),
open = c(23.7, 24.31, 24.495, 24.23, 24.31, 24.495))
df %>%
group_by(ric, date) %>%
mutate(dupe = n()>1)
# A tibble: 6 x 4
# Groups: ric, date [4]
ric date open dupe
<chr> <chr> <dbl> <lgl>
1 S1A.PA 2011-06-30 20:00:00 23.7 FALSE
2 ABC.PA 2011-07-03 20:00:00 24.3 TRUE
3 EFG.PA 2011-07-04 20:00:00 24.5 TRUE
4 S1A.PA 2011-07-05 20:00:00 24.2 FALSE
5 ABC.PA 2011-07-03 20:00:00 24.3 TRUE
6 EFG.PA 2011-07-04 20:00:00 24.5 TRUE