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

时间:2015-01-13 18:38:49

标签: r

示例/补偿数据:

假设我想重新编码,以便如果一行在A下有1,那么B下的NA将被重新编码为0.但是,如果一行在A下有0,那么午餐时的B仍为NA。但是,“变量也有NA值,我不想影响B值。

我一直在使用这样的代码:dat[dat$A==1,]$B<-0 但它一直在返回

error: issuing values are not allowed in subscripted assignments of data frames
due to the NA values.
A  B   C  D   
1  NA  0  1    
0  NA  0  NA    
NA  1  1  1

1 个答案:

答案 0 :(得分:0)

使用data.table

的选项
library(data.table)
setDT(df)[A==1 & is.na(B), B:=0][]

如果您要为A

中的所有0将B设置为1s
setDT(df)[A==1, B:=0][]

base R方法

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))