在 R 中按组计算最小值时遇到麻烦



使用这里的答案,我已经多次成功地按组计算了最小值和最大值。这次它不起作用,我不明白为什么。这是一个可重现的示例。

example <- structure(
list(ID = 1:10, 
date = 
c("2005-05-09", "2006-09-18", "1996-06-14", "1997-01-06", 
"1997-03-13", "1997-05-06", "1990-01-04", "1990-01-11", 
"1989-12-28", "1989-12-28"), 
name = c("a", "a", "a", "a", "a", "a", "b", "b", "b", "b")), 
.Names = c("ID", "date", "name"), 
class = c("data.table", "data.frame"), 
row.names = c(NA, -10L))
example[example[, .I[which.min(date)], by=c("name")]$V1]

我期待这样的东西:

1996-06-14    a
1989-12-28    b

但相反,我得到了一个空的数据表。为什么?

下面让我们:

library(data.table)
DT <- as.data.table(example)

1(如果你在代码中用xtfrm(date)替换date,它将起作用。

DT[DT[, .I[which.min(xtfrm(date))], by=c("name")]$V1]

给:

ID       date name
1:  3 1996-06-14    a
2:  9 1989-12-28    b

2(这只为每个组提供一个最小值:

DT[, .SD[which.min(xtfrm(date))], by = name]

给:

name ID       date
1:    a  3 1996-06-14
2:    b  9 1989-12-28

3(这给出了每个组的所有最小值:

DT[, .SD[date == min(date)], by = name]

给:

name ID       date
1:    a  3 1996-06-14
2:    b  9 1989-12-28
3:    b 10 1989-12-28

最新更新