我對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
data.table嘗試:
test_dt <- setDT(test_df)
test_dt[!is.na(date), by = id][
,keyby = .(date)][
,.N, by = id][
N > 1
]
uj5u.com熱心網友回復:
在distinct中dplyr能unique在data.table與by選項
unique(setDT(test_df)[!is.na(date)], by = c("id", "date"))[, .N, by = id][N > 1]
id N
1: 5678 2
步驟如下
- 轉換為資料表 (
setDT) NA從 'date' (!is.na(date)) 中洗掉行- 獲取
unique行by的“ID”和“日期”欄 - 按 'id' 分組以獲取計數 (
.N) - 最后,過濾count大于1的行
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/312489.html
