【发布时间】:2017-03-17 19:13:40
【问题描述】:
我正在尝试创建一个函数,该函数将为数据集中的一组选定列创建新的标记指标列。
# Data Set
A = as.factor(c(0,2,1,0))
B = as.factor(c(2,NA,1,0))
C = as.factor(c(1,0,NA,0))
D = as.factor(c(NA,2,0,1))
dat = data.table(A, B, C, D)
目前我正在为我想要的每一列执行此操作:
# What I'm currently doing (expected output of loop matches these columns)
attach(dat)
VAR = B
dat$b.test[VAR == "0"] <- "0"
dat$b.test[VAR == "1" | VAR == "2"] <- "1"
VAR = C
dat$c.test[VAR == "0"] <- "0"
dat$c.test[VAR == "1" | VAR == "2"] <- "1"
VAR = D
dat$d.test[VAR == "0"] <- "0"
dat$d.test[VAR == "1" | VAR == "2"] <- "1"
detach(dat)
似乎我应该能够创建一个 for 循环,该循环将在一个向量上运行,该向量包含我希望逻辑在 (B、C、D) 上执行的所有列,并从另一个向量 (b2 , c2, d2) 在每个向量内的相同位置。
尝试方法一
# Failed method 1
attach(dat)
new.var = c(b2, c2, d2)
cur.var = c(B, C, D)
l = length(cur.var)
for(i in 1:l){
X = cur.var[i]
VAR = cur.var[i]
dat$X[VAR == "0"] <- "0"
dat$X[VAR == "1" | VAR == "2"] <- "1"
}
detach(dat)
新列 X 中的结果
尝试方法二
# Failed method 2
new.var = c(dat$b2, dat$c2, dat$d2)
cur.var = c(dat$B, dat$C, dat$D)
l = length(cur.var)
for(i in 1:l){
new.var[i] = ifelse(new.var[i] == "0", "0",
ifelse(new.var[i] == "1" | "2", "1", NA)
)
}
有其他方法可以尝试吗?
【问题讨论】:
-
欢迎来到 SO。请向我们提供您想要的输出的 df。
标签: r for-loop data.table