示例/补偿数据:
假设我想重新编码,以便如果一行在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
答案 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))