我有以下data.table,與NA值和類型字符的非NA值的列如何在data.table列中標記/計數連續的非NA值對?
library(data.table)
dt = fread(...)
print(dt$column1)
[1] NA NA NA "1 1" "1 1" "1 1" NA NA NA NA
[11] NA "1 2" NA NA NA NA NA NA NA NA
[21] NA NA NA NA NA NA NA NA NA NA
[31] NA NA NA NA NA "1 3" NA NA NA NA
[41] NA "1 4" "1 4" NA NA NA NA NA NA NA
[51] NA NA NA NA NA NA NA NA NA NA
[61] NA NA "1 5" NA NA NA NA NA NA NA
...
我想其表示連續非NA值的標籤新的一列,即,
print(dt$groups)
[1] 0 0 0 1 1 1 0 0 0 0
[11] 0 2 0 0 0 0 0 0 0 0
[21] 0 0 0 0 0 0 0 0 0 0
[31] 0 0 0 0 0 3 0 0 0 0
[41] 0 4 4 0 0 0 0 0 0 0
[51] 0 0 0 0 0 0 0 0 0 0
[61] 0 0 5 0 0 0 0 0 0 0
...
如果我試試這個:
dt[, groups := !is.na(column1)]
這會給我一個布爾值向量,連續用真實的陳述。但我不確定如何將其轉換爲連續的TRUE對的標籤。
有沒有data.table方法來做到這一點?
大概'DT [,組:= is.na(列1)* cumsum(!is.na(column1))]'會工作,但是很難在沒有[工作示例]的情況下測試代碼(http://stackoverflow.com/questions/5963269/how-to-make-a-great -r重現-例子)。 – lmo
@lmo,不錯的嘗試。但是,這將爲前3個連續的非NA值分配不同的組ID。你錯過了一對圓括號:'(!is.na(column1))* cumsum(!is.na(column1))' – mt1022
@ mt1022謝謝。就像我說的,如果沒有一個工作的例子,就很難測試代碼。 – lmo