r - R统一具有部分冗余的数据
问题描述
我有这样的数据
B A Distance
1: 1101053 1102060 3.8
2: 1101053 1102065 6.1
3: 1101053 1102067 5.8
4: 1101053 1102068 4.0
5: 1101053 1102069 5.1
6: 1101053 1102069 6.0
7: 1101053 1102069 7.0
8: 1101053 1102069 6.6
9: 1101053 1102069 6.6
10: 1101053 1103051 4.3
11: 1101053 1103052 5.6
在第 5 行到第 9 行中,它们在 B、A 列中共享相同的值,但距离不同。如果我用一个距离(最小)将它们统一起来,最好的解决方案是什么?
预期的输出将是
B A Distance
1: 1101053 1102060 3.8
2: 1101053 1102065 6.1
3: 1101053 1102067 5.8
4: 1101053 1102068 4.0
5: 1101053 1102069 5.1
6: 1101053 1103051 4.3
7: 1101053 1103052 5.6
我会很感激一些帮助
解决方案
您可以分组并取最小值:
dat <- read.table(header=TRUE, text="
B A Distance
1101053 1102060 3.8
1101053 1102065 6.1
1101053 1102067 5.8
1101053 1102068 4.0
1101053 1102069 5.1
1101053 1102069 6.0
1101053 1102069 7.0
1101053 1102069 6.6
1101053 1102069 6.6
1101053 1103051 4.3
1101053 1103052 5.6")
解决方案使用data.table
:
library(data.table)
setDT(dat)
dat[, .(Distance = min(Distance)), by=.(B, A)]
#> B A Distance
#> 1: 1101053 1102060 3.8
#> 2: 1101053 1102065 6.1
#> 3: 1101053 1102067 5.8
#> 4: 1101053 1102068 4.0
#> 5: 1101053 1102069 5.1
#> 6: 1101053 1103051 4.3
#> 7: 1101053 1103052 5.6
使用以下解决方案tidyverse
:
library(dplyr)
dat %>%
group_by(B, A) %>%
summarize(Distance = min(Distance))
#> # A tibble: 7 x 3
#> # Groups: B [1]
#> B A Distance
#> <int> <int> <dbl>
#> 1 1101053 1102060 3.8
#> 2 1101053 1102065 6.1
#> 3 1101053 1102067 5.8
#> 4 1101053 1102068 4
#> 5 1101053 1102069 5.1
#> 6 1101053 1103051 4.3
#> 7 1101053 1103052 5.6
推荐阅读
- python - GTK3 / Glib 重复一个函数
- c - 用双精度数替换所有整数有什么缺点?
- python - 关闭打开的文件描述符的 I/O 对象
- javascript - 如何从伪类中获取内容?
- c# - StringReader Peek() 在 C# 中有更多步骤
- excel - 计算没有重复的行(有 1 个条件)?
- php - 如何将 $root 路径设置为项目文件夹内部?是否应该将整个项目复制到 org.eclipse.wst.server.core\tmp0\htdocs 文件夹并从中运行
- java - Java中的标准输出为空
- java - 如何将游戏升级到下一个级别
- javascript - 具有非常特殊字符的字符串会导致问题