如何使用条件语句在R中重新编码变量,同时保留NA值?

如何使用条件语句在R中重新编码变量,同时保留NA值?,r,R,示例/合成数据: 假设我想重新编码,这样如果一行a下有1,那么B下的NA被重新编码为0。然而,如果一行在a下有0,那么午餐下的B仍然是NA。然而,“A”变量也有NA值,我不想影响B值 我一直在使用这样的代码:dat[dat$A==1,]$B一个使用data.table的选项 library(data.table) setDT(df)[A==1 & is.na(B), B:=0][] 如果要为A中的所有1将B设置为0 setDT(df)[A==1, B:=0][] 或者一个base R

示例/合成数据:

假设我想重新编码,这样如果一行a下有1,那么B下的NA被重新编码为0。然而,如果一行在a下有0,那么午餐下的B仍然是NA。然而,“A”变量也有NA值,我不想影响B值


我一直在使用这样的代码:
dat[dat$A==1,]$B一个使用
data.table的选项

library(data.table)
setDT(df)[A==1 & is.na(B), B:=0][]
如果要为A中的所有
1
将B设置为
0

setDT(df)[A==1, B:=0][]
或者一个
base R
方法

df$B[with(df, !!A & is.na(B))] <- 0

df$B[with(df,!!A&is.na(B))]在所示的示例中,没有
午餐
早餐
甜点
,假设
A,B,C,D
是列名。我现在饿了。也许
在(dat,B)中,您可以格式化您的问题并添加head(dat)的结果吗?太好了!哎呀,刚刚换了个例子。我不好让大家想到华夫饼和沙砾。@MCH你的代码应该改成
dat$B[dat$A==1]
setDT(df)[A==1, B:=0][]
df$B[with(df, !!A & is.na(B))] <- 0
df <- structure(list(A = c(1L, 0L, NA), B = c(NA, NA, 1L), C = c(0L, 
0L, 1L), D = c(1L, NA, 1L)), .Names = c("A", "B", "C", "D"), class =
"data.frame", row.names = c(NA, -3L))