r - 找到最小数的对应值 - r

标签 r data.table

我有一个数据框,我想在其中获取相应的最小值。

library(data.table)
df <- data.frame(cbind(c(1,1,1,1,2,2,2,2), 
                       c(180,170,180,190,160,170,170,180),
                       c(80,75,76,81,67,65,66,70), 
                       c(5,6,7,8,9,5,6,7)
                 ))

df_stat <- setDT(df)[, list(
             min = min(X2)
            ), by = X1]

结果应该是这样的

df_stat <- data.frame(cbind(c(1,2),
                            c(170,160),
                            c(75,67),
                            c(6,9)
                    ))

我尝试过which.min和其他人,但他们没有提供正确的结果。 提前致谢。 埃里克

最佳答案

您可以在原始数据上使用.SD

setDT(df)
df[, .SD[which.min(X2)], by = X1]
#    X1  X2 X3 X4
# 1:  1 170 75  6
# 2:  2 160 67  9

或者您可以按 X1X2 排序,并选择唯一的 X1

unique(setorder(df, X1, X2), by = "X1")
#    X1  X2 X3 X4
# 1:  1 170 75  6
# 2:  2 160 67  9

或者使用 .I 创建索引,然后按其子集

indx <- df[, .I[which.min(X2)], by = X1]$V1
df[indx]
#    X1  X2 X3 X4
# 1:  1 170 75  6
# 2:  2 160 67  9

关于r - 找到最小数的对应值 - r,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30152194/

相关文章:

r - 将 tidyr::complete 与 group_by 一起使用

r - ArcView 和/或 R 是否使用显卡 (GPU) 加速

r - 为什么在更新键列时删除键?

r - data.table - 也基于名称为列的变量进行子集化

r - 如何获取 data.table 中每个(选定)列的前 k 值的索引

r - 对于高基数分组,为什么使用 dplyr 管道 (%>%) 比等效的非管道表达式慢?

r - 在指定向量的每个元素处分割字符串

r - R中的邻近空间过滤

r - 稀疏数据帧直接更新(替换)速度慢且效率低

r - data.table 中的内存泄漏按引用分组分配