迭代 data.table

Iteration over data.table

我有一个 table A,其列名为:Var1Var2Var3

Var1 = c("N1", "N2", "0", "0", "N3", "N4", "0", "0")
Var2 = c("0", "A", "0", "0", "0", "B", "0", "0")
Var3 = c("0", "Yes", "No", "All", "0", "x", "y", "z")

我想获得基于 Table A 的向量,其中包含列中的值,例如:N2 = (Yes, No, All)N4 = (x, y, z)。 我用“for loop”和“logical if”尝试了几次迭代,但没有成功。请给我一些提示。

data.table:

  • Var1 中的 0 替换为 NA
  • 结转最后一次出现的非 NA 值(例如使用 zoo::na.locf 因为 data.table::nafill doesnt yet work for characters)。
  • 根据Var1过滤:
library(data.table)
data <- data.table(Var1 = c("N1", "N2", "0", "0", "N3", "N4", "0", "0"), Var2 = c("0", "A", "0", "0", "0", "B", "0", "0"), Var3 = c("0", "Yes", "No", "All", "0", "x", "y", "z"))

# replace 0s by NA for next step
data[Var1==0,Var1:=NA]

# last occurence carried forward
data[,Var1:=zoo::na.locf(Var1)]

data[Var1=='N2',Var3]
#[1] "Yes" "No"  "All"

data[Var1=='N4',Var3]
#[1] "x" "y" "z"