基于最小值的子集数据
Subset data based on Minimum Value
这可能很简单。这是数据:
dat <- read.table(header=TRUE, text="
Seg ID Distance
Seg46 V21 160.37672
Seg72 V85 191.24400
Seg373 V85 167.38930
Seg159 V147 14.74852
Seg233 V171 193.01636
Seg234 V171 200.21458
")
dat
Seg ID Distance
Seg46 V21 160.37672
Seg72 V85 191.24400
Seg373 V85 167.38930
Seg159 V147 14.74852
Seg233 V171 193.01636
Seg234 V171 200.21458
我打算得到一个像下面这样的 table,它将给我 Seg
最小距离(因为在 ID
中看到了重复。
Seg Crash_ID Distance
Seg46 V21 160.37672
Seg373 V85 167.38930
Seg159 V147 14.74852
Seg233 V171 193.01636
我正在尝试用ddply
来解决;但它没有到达那里。
ddply(dat, "Seg", summarize, min = min(Distance))
Seg min
Seg159 14.74852
Seg233 193.01636
Seg234 200.21458
Seg373 167.38930
Seg46 160.37672
Seg72 191.24400
我们可以用 which.min
对行进行子集化。用 'ID' 分组后,我们 slice
基于最小值 'Distance' 的位置的行。
library(dplyr)
dat %>%
group_by(ID) %>%
slice(which.min(Distance))
使用 data.table
的类似选项是
library(data.table)
setDT(dat)[, .SD[which.min(Distance)], by = ID]
如果你喜欢ddply
你可以这样做
library(plyr)
ddply(dat, .(ID), summarize,
Seg = Seg[which.min(Distance)],
Distance = min(Distance))
# ID Seg Distance
#1 V147 Seg159 14.74852
#2 V171 Seg233 193.01636
#3 V21 Seg46 160.37672
#4 V85 Seg373 167.38930
这可能很简单。这是数据:
dat <- read.table(header=TRUE, text="
Seg ID Distance
Seg46 V21 160.37672
Seg72 V85 191.24400
Seg373 V85 167.38930
Seg159 V147 14.74852
Seg233 V171 193.01636
Seg234 V171 200.21458
")
dat
Seg ID Distance
Seg46 V21 160.37672
Seg72 V85 191.24400
Seg373 V85 167.38930
Seg159 V147 14.74852
Seg233 V171 193.01636
Seg234 V171 200.21458
我打算得到一个像下面这样的 table,它将给我 Seg
最小距离(因为在 ID
中看到了重复。
Seg Crash_ID Distance
Seg46 V21 160.37672
Seg373 V85 167.38930
Seg159 V147 14.74852
Seg233 V171 193.01636
我正在尝试用ddply
来解决;但它没有到达那里。
ddply(dat, "Seg", summarize, min = min(Distance))
Seg min
Seg159 14.74852
Seg233 193.01636
Seg234 200.21458
Seg373 167.38930
Seg46 160.37672
Seg72 191.24400
我们可以用 which.min
对行进行子集化。用 'ID' 分组后,我们 slice
基于最小值 'Distance' 的位置的行。
library(dplyr)
dat %>%
group_by(ID) %>%
slice(which.min(Distance))
使用 data.table
的类似选项是
library(data.table)
setDT(dat)[, .SD[which.min(Distance)], by = ID]
如果你喜欢ddply
你可以这样做
library(plyr)
ddply(dat, .(ID), summarize,
Seg = Seg[which.min(Distance)],
Distance = min(Distance))
# ID Seg Distance
#1 V147 Seg159 14.74852
#2 V171 Seg233 193.01636
#3 V21 Seg46 160.37672
#4 V85 Seg373 167.38930