R合并具有相似值的行

标签 r dataframe dplyr diff cluster-analysis

我有一个数据框,行值首先从小到大排序。我计算相邻行之间的行值差异,合并具有相似差异(例如,小于 1)的行,并返回合并行的平均值。我可以用 for 循环检查每一行的差异,但似乎是一种非常低效的方法。有更好的主意吗?谢谢。

library(dplyr)
DF <- data.frame(ID=letters[1:12],
                 Values=c(1, 2.2, 3, 5, 6.2, 6.8, 7, 8.5, 10, 12.2, 13, 14))
DF <- DF %>%
   mutate(Diff=c(0, diff(Values)))

DF 的预期输出是

ID        Values
a         1.0
b/c       2.6  # (2.2+3.0)/2
d         5.0
e/f/g     6.67 # (6.2+6.8+7.0)/3
h         8.5
i         10.0
j/k       12.6 # (12.2+13.0)/2
i         14.0

最佳答案

这是一个带有data.table的选项

library(data.table)
setDT(DF)[, .(ID = toString(ID), Values = round(mean(Values), 2)),
          by = .(Diff = cumsum(c(TRUE, diff(Values)>=1)))][, -1, with = FALSE]
#        ID Values
#1:       a   1.00
#2:    b, c   2.60
#3:       d   5.00
#4: e, f, g   6.67
#5:       h   8.50
#6:       i  10.00
#7:    j, k  12.60
#8:       l  14.00

关于R合并具有相似值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50312514/

相关文章:

r - C50 通过插入符号包苦苦挣扎

r - 在 r markdown 循环中使用 flextable 不生成表格

r - 使用 ggplot 创建多个堆叠的 fiddle 图

python - 使用 Pandas ,我如何比较两个数据帧的两列之间的值并将它们推送到新的数据帧?

r - 地圈/dplyr : create matrix of distance between coordinates

r - R中的微秒时间戳

r - 将命名的日期列表堆叠到 data.frame

python - 如何使用 pandas.Series.str.contains 为包含给定条件的行返回真值

r - 通过不同的公共(public)列组合迁移进出数据

r - COUNTIF 相当于 dplyr 总结