我有一个数据框,我想在其中得到相应的值min值。
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和其他人,但他们没有提供正确的结果。 提前致谢。 埃里克
答案 0 :(得分:4)
您可以在原始数据上使用.SD
setDT(df)
df[, .SD[which.min(X2)], by = X1]
# X1 X2 X3 X4
# 1: 1 170 75 6
# 2: 2 160 67 9
或者您可以按X1
和X2
排序并选择唯一的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