我有一个数字向量:
numbers <- c(4,23,4,23,5,43,54,56,657,67,67,435,
453,435,324,34,456,56,567,65,34,435)
Run Code Online (Sandbox Code Playgroud)
如何计算值x在向量中出现的次数?
R中复制的函数执行重复行搜索.如果我们想要删除重复项,我们只需要编写df[!duplicated(df),],重复项将从数据框中删除.
但是如何找到重复数据的索引呢?如果duplicated在某行上返回TRUE,则意味着这是数据帧中第二次出现这样的行,并且可以很容易地获得其索引.如何获得该行首次出现的索引?或者,换句话说,重复行与之相同的索引?
我可以在data.frame上做一个循环,但我认为这个问题有一个更优雅的答案.
PHP 有一个类似的问题,但我正在使用R,我无法将解决方案转换为我的问题.
我有10行50列的数据框,其中一些行完全相同.如果我在它上面使用unique,我会得到一行 - 比方说 - "type",但我真正想要的只是获得那些只出现一次的行.有谁知道我怎么能做到这一点?
我可以看看集群和热图来手动排序,但我有比上面提到的更大的数据帧(最多100行),这有点棘手.
我有一个像这样的向量:
x = c(1,2,3,4,5,6,4,5,6,7)
> x
[1] 1 2 3 4 5 6 4 5 6 7
Run Code Online (Sandbox Code Playgroud)
我想摆脱重复并得到这样的东西:
> [1] 1 2 3 7
Run Code Online (Sandbox Code Playgroud)
我的尝试
y = x[duplicated(x)]
> y
[1] 4 5 6
> x[x!=y]
[1] 1 2 3 7
Warning message:
In x != y : longer object length is not a multiple of shorter object length
>
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我应该担心这个错误吗?
还有另一种方法可以做到而不会出错吗?
这样的函数是否存在于任何包中?
isdup <- function (x) duplicated (x) | duplicated (x, fromLast = TRUE)
Run Code Online (Sandbox Code Playgroud)
我的目的是使用它dplyr来显示给定列中具有重复值的所有行.我还需要第一次出现重复元素.
例如,在这个data.frame中
dat <- as.data.frame (list (l = c ("A", "A", "B", "C"), n = 1:4))
dat
> dat
l n
1 A 1
2 A 2
3 B 3
4 C 4
Run Code Online (Sandbox Code Playgroud)
我想显示列l重复的行,即.具有A值的人:
library (dplyr)
dat %>% filter (isdup (l))
Run Code Online (Sandbox Code Playgroud)
回报
l n
1 A 1
2 A 2
Run Code Online (Sandbox Code Playgroud)