r - 如何在 data.table 中链接 group_by、filter、distinct、count?
问题描述
我对data.table有点陌生,并试图将我的dplyr代码复制到data.table但无法获得相同的结果。
库
library(data.table)
library(lubridate)
library(tidyverse)
df
(在这个虚拟数据中没有使用任何 NA,但需要过滤掉 NA)
test_df <- data.frame(id = c(1234, 1234, 5678, 5678),
date = c("2021-10-10","2021-10-10", "2021-8-10", "2021-8-15")) %>%
mutate(date = ymd(date))
dplyr 代码:
找出具有多个不同日期的 ID。
test_df %>%
group_by(id) %>%
filter(!is.na(date)) %>%
distinct(date) %>%
count(id) %>%
filter(n > 1)
id n
5678 2
数据表尝试:
test_dt <- setDT(test_df)
test_dt[!is.na(date), by = id][
,keyby = .(date)][
,.N, by = id][
N > 1
]
解决方案
distinct
in dplyr
can unique
in data.table
withby
选项_
unique(setDT(test_df)[!is.na(date)], by = c("id", "date"))[, .N, by = id][N > 1]
id N
1: 5678 2
步骤如下
- 转换为 data.table (
setDT
) - 删除带有
NA
from 'date' (!is.na(date)
)的行 - 获取'id' 和 'date' 列的
unique
行by
- 按 'id' 分组以获取计数 (
.N
) - 最后过滤count大于1的行
推荐阅读
- javascript - 使用带有 Scryfall API 的 Axios 时出现问题
- javascript - 在 onsubmit 中执行 ajax 验证
- r - 跨组添加趋势线并在分组小提琴图或箱线图中设置刻度标签
- grpc - 在 grpc-node 中记录请求时间是否有任何选项?
- php - Cron + PHPMailer 邮件队列
- c++ - 查找输出流的当前基数
- python - 将带有对象的函数传递给 concurrent.futures.ProcessPoolExecutor()?
- php - 如何通过使下一项成为上一项的子项的一部分来移动数组?
- jquery - 动画宽度到指定百分比并在动画时显示从 0 到指定百分比的百分比
- r - R Shiny 不会在对话框上绘制条形图