我有一个不寻常的数据集,我需要使用它,我已经创建了一个小规模,可重现的例子。
library(data.table)
DT <- data.table(Type = c("A", rep("", 4), "B", rep("", 3), "C", rep("", 5)), Cohort = c(NA,1:4, NA, 5:7, NA, 8:12))
dt <- data.table(Type = c(rep("A", 4), rep("B", 3), rep("C", 5)), Cohort = 1:12)
我需要DT
看起来像dt
,实际数据集有680万行。我意识到这可能是一个简单的问题,但我似乎无法弄明白,也许setkey
?感谢任何帮助。谢谢。
答案 0 :(得分:5)
您可以NA
替换“”并使用na.locf
包中的zoo
:
library(zoo)
DT[Type=="",Type:=NA][,Type:=na.locf(Type)][!is.na(Cohort)]
答案 1 :(得分:0)
以下是不使用na.locf
的其他选项。通过逻辑向量(Type!=""
)的累积总和进行分组,我们选择“群组”的第一个“类型”和lead
值,将其分配(:=
)到{{1 'DT'替换原始列值并使用names
替换NA行。
na.omit