R中复制的函数执行重复行搜索.如果我们想要删除重复项,我们只需要编写df[!duplicated(df),],重复项将从数据框中删除.
但是如何找到重复数据的索引呢?如果duplicated在某行上返回TRUE,则意味着这是数据帧中第二次出现这样的行,并且可以很容易地获得其索引.如何获得该行首次出现的索引?或者,换句话说,重复行与之相同的索引?
我可以在data.frame上做一个循环,但我认为这个问题有一个更优雅的答案.
以下是我的数据,
data
date number value
2016-05-05 1 5
2016-05-05 1 6
2016-05-06 2 7
2016-05-06 2 8
2016-05-07 3 9
2016-05-08 4 10
2016-05-09 5 11
Run Code Online (Sandbox Code Playgroud)
当我使用以下命令时,
data %>% groupby(date, number) %>% summarize(count = n())
Run Code Online (Sandbox Code Playgroud)
我得到以下信息,
date number count
2016-05-05 1 2
2016-05-06 2 2
2016-05-07 3 1
2016-05-08 4 1
2016-05-09 5 1
Run Code Online (Sandbox Code Playgroud)
现在我想过滤掉与计数大于 1 对应的条目。我想删除计数大于 1 的组合条目。我的输出应该如下所示,
data
date number value
2016-05-07 3 9
2016-05-08 4 10
2016-05-09 5 11
Run Code Online (Sandbox Code Playgroud)
其中前四个条目,因为它的计数大于 1 ,已被过滤掉。有人可以帮我做这件事吗?或者给出一些与之相关的想法?
我试图解决这个非常基本的例子并尝试提取以下数据:
count SN data.stamp
1 00601 2018-07-26 13:38:39
0 00601 2018-11-05 23:00:09
0 00601 2018-11-05 23:00:16
4 00601 2018-11-12 23:00:05
0 00601 2018-12-12 23:00:05
5 00601 2018-11-12 23:00:05
0 00601 2018-12-12 23:00:05
0 00601 2018-11-12 23:00:05
0 00601 2018-12-12 23:00:05
Run Code Online (Sandbox Code Playgroud)
预期产量:
count SN data.stamp
1 00601 2018-07-26 13:38:39
0 00601 2018-11-05 23:00:09
4 00601 2018-11-12 23:00:05
0 00601 2018-12-12 23:00:05
5 00601 2018-11-12 23:00:05
0 00601 2018-12-12 23:00:05
Run Code Online (Sandbox Code Playgroud)
我想只考虑单0值计数.如果有多个0值计数,那么它应该只考虑第一个值并忽略其余的0计数.
基本上,我只寻找第一个零值,然后是非零值.
我尝试过使用,rle但我想从中提取数据data.frame …
所以我对这个问题有类似的问题: 删除R中的重复行
在我的情况下,我想保留所有列(不像它建议使用unique前3列的功能).我想从数据框中只考虑2列,如果两个提到的列中的"值"相同,则只保留1行.
数据看起来像:
structure(list(P1 = structure(c(1L, 1L, 3L, 3L, 5L, 5L, 5L, 5L,
4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 2L, 2L), .Label = c("Apple",
"Grape", "Orange", "Peach", "Tomato"), class = "factor"), P2 = structure(c(4L,
4L, 3L, 3L, 5L, 5L, 5L, 5L, 6L, 6L, 2L, 2L, 2L, 2L, 1L, 1L, 1L,
1L, 6L, 6L), .Label = c("Banana", "Cucumber", "Lemon", "Orange",
"Potato", "Tomato"), class = "factor"), P1_location_subacon = structure(c(NA,
NA, 1L, 1L, 1L, 1L, 1L, …Run Code Online (Sandbox Code Playgroud) 我有两列,只想保留非交换行.对于下面的数据,我的输出应该包含一个(1 2)的组合.即我的查询(1 2)与(2 1)相同.有没有一种简单的方法在R中做到这一点.已经尝试过调换.并保留上部的traingular矩阵.但转移数据变得很痛苦.
A B prob
1 2 0.1
1 3 0.2
1 4 0.3
2 1 0.3
2 3 0.1
2 4 0.4
Run Code Online (Sandbox Code Playgroud)
我的最终输出应该是:
A B prob
1 2 0.1
1 3 0.2
1 4 0.3
2 3 0.1
2 4 0.4
Run Code Online (Sandbox Code Playgroud) 我正在尝试仅提取每个行b是唯一值时的行a。
这是一些示例数据
a <- c(1,1,2,2,3,3,4,4,5,5,5,6,6,7,7,8,8,9,9,9,9,9,10,10,10)
b <- c(1,2,1,1,5,5,6,1,1,1,3,2,2,1,1,2,3,1,2,3,4,4,1,2,2)
df1 <- data.frame(a, b)
Run Code Online (Sandbox Code Playgroud)
并使用dplyr包
library(dplyr)
Unique <- df1 %>%
group_by(a) %>%
filter(n_distinct(b))
Run Code Online (Sandbox Code Playgroud)
所需的输出应该是数据帧长度 18
我有一个 data.frame 如下所示。
> df2 <- data.frame("StudentId" = c(1,1,1,2,2,3,3), "Subject" = c("Maths", "Maths", "English","Maths", "English", "Science", "Science"), "Score" = c(100,90,80,70, 60,20,10))
> df2
StudentId Subject Score
1 1 Maths 100
2 1 Maths 90
3 1 English 80
4 2 Maths 70
5 2 English 60
6 3 Science 20
7 3 Science 10
Run Code Online (Sandbox Code Playgroud)
很少有 StudentId 的主题列有重复值(例如:ID 1 有 2 个“数学”条目。我只需要保留第一个重复行。预期的 data.frame 是:
StudentId Subject Score
1 1 Maths 100
3 1 English 80
4 2 Maths 70
5 2 …Run Code Online (Sandbox Code Playgroud) r ×7
dplyr ×3
dataframe ×2
data.table ×1
duplicates ×1
filter ×1
matrix ×1
reshape ×1
reshape2 ×1
transpose ×1