迭代 data.table
Iteration over data.table
我有一个 table A,其列名为:Var1
、Var2
、Var3
。
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"
我有一个 table A,其列名为:Var1
、Var2
、Var3
。
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"