在 R 中选择唯一的行

Dmi*_*try 0 r

有一个 data.frame 变量“时间”有重复的值

> data.old
             Time  Count  Direction
1    100000630955     95          1
2    100000637570      5          0
3    100001330144      7          1
4    100001330144     33          1
5    100001331413     39          0
6    100001331413     43          0
7    100001334038      1          1
8    100001357594     50          0
Run Code Online (Sandbox Code Playgroud)

您必须保留所有值不得重复。并将变量“Count”的值与重复值相加,即

> data.new
             Time  Count  Direction
1    100000630955     95          1
2    100000637570      5          0
3    100001330144     40          1
4    100001331413     82          0
5    100001334038      1          1
6    100001357594     50          1
Run Code Online (Sandbox Code Playgroud)

在命令的帮助下我可以找到这些唯一值

> data.old$Time[!duplicated(data.old$Time)]
   [1] 100000630955 100000637570 100001330144 100001331413 100001334038 100001357594  
Run Code Online (Sandbox Code Playgroud)

我可以循环执行此操作,但也许有更优雅的解决方案

And*_*ēza 5

这是使用dplyr. 这是你想做的吗?

library(tidyverse)
data.old %>%
group_by(Time) %>%
   summarise(Count = sum(Count))
Run Code Online (Sandbox Code Playgroud)

编辑:保留其他变量

OP 表示希望在summarise删除的数据框中保留其他变量的值。假设这些其他变量的所有值对于要汇总的所有行都相同,您可以使用此 SO question 中Mode函数。

Mode <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}
Run Code Online (Sandbox Code Playgroud)

然后将我的答案更改为以下内容,为您要保留的每个变量调用一次 Mode。这适用于数字和字符数据。

library(tidyverse)
data.old %>%
group_by(Time) %>%
   summarise(Count = sum(Count), Direction = Mode(Direction))
Run Code Online (Sandbox Code Playgroud)