[英]R data.table: detect pattern of values within each group
假設我有一個像這樣的 data.table:
set.seed(10)
data.table(group = rep(c("a","b","c"), each=5), date = rep(1:5,3), value = sample(c(95:105,""),15, replace=TRUE))
在每個組中,在 value 列中,我想檢查(以簡單的方式)是否有“”(空字符)或一組空字符,它們前后都有一個值。
所以,這很好:"", 95,103, etc.... (空字符在組中的第一個),但下面的模式是我想檢測的“缺失數據”示例:
95, "", 103,...(中間為空字符)
95, "","", 103...(中間幾個空字符)
95, 103, ""(最后是空字符)
所以,在下面的輸出中,我將能夠得到行/組 A,如果有很多組,我應該得到所有組(或行)
group date value
1: a 1 105
2: a 2 103
3: a 3 104
4: a 4
5: a 5 101
6: b 1 102
7: b 2 100
8: b 3 101
9: b 4 97
10: b 5 102
11: c 1 104
12: c 2 101
13: c 3 104
14: c 4 96
15: c 5 102
編輯:我需要做的是選擇具有錯誤模式的行(中間或最后是空字符串) ,以便能夠檢測大型數據集中是否存在任何錯誤。 因此,在我的示例中的表中,所需的輸出將是第 4 行,因為它具有“缺失值”(值之間的空字符)
group date value
1: a 4
(當然,如果有更多不需要的行,我想獲取所有行)
如果您的 data.table 未根據“日期”列排序,您可以使用以下內容:
DT[order(date), order := c(1:.N) , group]
DT[value == "" & order > 1L]
輸出:
group date value order
1: a 4 4
數據和你的一樣:
set.seed(10)
DT <- data.table(group = rep(c("a","b","c"), each=5), date = rep(1:5,3),
value = sample(c(95:105,""),15, replace=TRUE))
這是一個選項:
DT[, rw := rleid(value==""), group]
DT[value=="" & rw>1L]
輸出:
group date value rw
1: a 4 2
數據:
library(data.table)
set.seed(10)
DT <- data.table(group = rep(c("a","b","c","d"), each=5),
date = rep(1:5,4), value = c(sample(c(95:105,""),15, replace=TRUE), c("",2,3,4,5)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.