有一个 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)
我可以循环执行此操作,但也许有更优雅的解决方案
这是使用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)