use*_*231 22 r duplicates dataframe
我在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 |
Run Code Online (Sandbox Code Playgroud)
我想知道是否有关于RIC和Date组合的重复.R中是否有功能?
jor*_*ran 44
您始终可以尝试将前两列传递给函数duplicated:
duplicated(dat[,1:2])
Run Code Online (Sandbox Code Playgroud)
假设您的数据框被调用dat.有关更多信息,我们可以duplicated通过?duplicated在控制台输入来查阅该功能的帮助文件.这将提供以下句子:
确定向量或数据框的哪些元素是具有较小下标的元素的副本,并返回指示哪些元素(行)是重复的逻辑向量.
因此duplicated返回一个逻辑向量,然后我们可以使用它来提取以下子集dat:
ind <- duplicated(dat[,1:2])
dat[ind,]
Run Code Online (Sandbox Code Playgroud)
或者您可以跳过单独的分配步骤并简单地使用:
dat[duplicated(dat[,1:2]),]
Run Code Online (Sandbox Code Playgroud)
Guy*_*ova 10
dplyr对于这类事情来说更好:
library(dplyr)
yourDataFrame %>%
distinct(RIC, Date, .keep_all = TRUE)
Run Code Online (Sandbox Code Playgroud)
(".keep_all是可选的.如果不使用,它将仅返回重复的2列.使用时,它返回重复数据删除的整个数据框)
Bra*_*don 10
获取所需信息的简单方法是使用dplyr.
library(dplyr)\n\nyourDF %>% \n group_by(RIC, Date) %>% \n mutate(num_dups = n(), \n dup_id = row_number()) %>% \n ungroup() %>% \n mutate(is_duplicated = dup_id > 1)\n# A tibble: 6 \xc3\x97 6\n RIC Date open num_dups dup_id is_duplicated\n <chr> <chr> <dbl> <int> <int> <lgl> \n1 S1A.PA 2011-06-30 20:00:00 23.7 1 1 FALSE \n2 ABC.PA 2011-07-03 20:00:00 24.3 2 1 FALSE \n3 EFG.PA 2011-07-04 20:00:00 24.5 2 1 FALSE \n4 S1A.PA 2011-07-05 20:00:00 24.2 1 1 FALSE \n5 ABC.PA 2011-07-03 20:00:00 24.3 2 2 TRUE \n6 EFG.PA 2011-07-04 20:00:00 24.5 2 2 TRUE \nRun Code Online (Sandbox Code Playgroud)\n使用这个:
\nnum_dups告诉您特定组合重复了多少次dup_id告诉您特定行是哪个重复数字(例如第一、第二或第三等)is_duplicated为您提供了一个简单的条件,您可以稍后过滤以删除所有重复的行(例如filter(!is_duplicated)),尽管您也可以用于dup_id此目的(例如filter(dup_id == 1))这是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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47705 次 |
| 最近记录: |