r - 在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)如果您在代码中替换date
为xtfrm(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
推荐阅读
- python - 如何以编程方式将反斜杠引号转换为双反斜杠引号?
- url - 如何在 scss 文件中调用像“http://...”这样的 url?
- javascript - 如何使用 ARGS[] 在 discord.js v12.5.3 中编写 clear 命令
- python - 每次都需要重启主管
- javascript - 如果其他下拉列表选择相同的值,则禁用选择下拉列表值
- android - 为什么 WIFIADB 根本不能与 android studio 一起工作?
- node.js - 杀死节点中执行的本地服务器实例
- javascript - JEST 模拟是否可能被彼此覆盖?
- php - App\Http\Controllers\Auth\RegisterController::create(array $data) 的声明必须与 App\Http\Controllers\Controller::create() 兼容
- node.js - 从 Update 方法正确返回 API 响应。Postgres db pg-promise Node.js