Lau*_*els 98 r duplicates r-faq
R' duplicated返回一个向量,显示向量或数据帧的每个元素是否是具有较小下标的元素的副本.因此,如果5行数据帧的第3行,第4行和第5行相同,duplicated则会给出向量
FALSE, FALSE, FALSE, TRUE, TRUE
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我真的想得到
FALSE, FALSE, TRUE, TRUE, TRUE
Run Code Online (Sandbox Code Playgroud)
也就是说,我想知道一行是否与具有更大下标的行重复.
Jos*_*ich 114
duplicated有一个fromLast论点."示例"部分?duplicated向您展示了如何使用它.只需调用duplicated两次,一次调用一次,fromLast=FALSE然后调用fromLast=TRUE其中任意一行TRUE.
一些晚期编辑:你没有提供一个可重复的例子,所以这里是@jbaums友好贡献的插图
vec <- c("a", "b", "c","c","c")
vec[duplicated(vec) | duplicated(vec, fromLast=TRUE)]
## [1] "c" "c" "c"
Run Code Online (Sandbox Code Playgroud)
42-*_*42- 33
您需要组合一组duplicated值,应用unique,然后进行测试%in%.与往常一样,样本问题将使这个过程变得活跃起来.
> vec <- c("a", "b", "c","c","c")
> vec[ duplicated(vec)]
[1] "c" "c"
> unique(vec[ duplicated(vec)])
[1] "c"
> vec %in% unique(vec[ duplicated(vec)])
[1] FALSE FALSE TRUE TRUE TRUE
Run Code Online (Sandbox Code Playgroud)
Hol*_*ndl 15
在数据帧重复的行可以用获得dplyr通过做
library(tidyverse)
df = bind_rows(iris, head(iris, 20)) # build some test data
df %>% group_by_all() %>% filter(n()>1) %>% ungroup()
Run Code Online (Sandbox Code Playgroud)
group_by_at(vars(-var1, -var2))可以使用排除某些列来对数据进行分组。
如果实际需要行索引而不仅仅是数据,您可以先添加它们,如下所示:
df %>% add_rownames %>% group_by_at(vars(-rowname)) %>% filter(n()>1) %>% pull(rowname)
Run Code Online (Sandbox Code Playgroud)
这是 @Joshua Ulrich 的函数解决方案。这种格式允许您以与使用 duplicated() 相同的方式使用此代码:
allDuplicated <- function(vec){
front <- duplicated(vec)
back <- duplicated(vec, fromLast = TRUE)
all_dup <- front + back > 0
return(all_dup)
}
Run Code Online (Sandbox Code Playgroud)
使用相同的示例:
vec <- c("a", "b", "c","c","c")
allDuplicated(vec)
[1] FALSE FALSE TRUE TRUE TRUE
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31814 次 |
| 最近记录: |