我的数据集类似于以下内容:
DiagnosticDescriptor
我正在尝试获得以下结果:df <- data.frame(
A = c(-1, 2, 3),
B = c(1, 1, -1))
df
# A B
# 1 -1 1
# 2 2 1
# 3 3 -1
和A
均为正值时保留值:
B
我已尝试 A B
1 NA NA
2 2 1
3 NA NA
,但当df2 <- apply(df, 1:2, function(x) if (x > 0) x else NA)
或A
为正数时,它会返回值。如何添加第二个条件?
答案 0 :(得分:6)
如果所有值在该行中为正值,则可以将每列乘以值为1的向量,否则取值NA:
df * ifelse(rowSums(df <= 0) > 0, NA, 1)
# A B
# 1 NA NA
# 2 2 1
# 3 NA NA
答案 1 :(得分:2)
replicate(NCOL(df), Reduce('|', lapply(df, function(x) x < 0)))
可以给出应该替换NA
的索引。它正在检查每列中是否至少有一个小于零的值。
replace(df, replicate(NCOL(df), Reduce('|', lapply(df, function(x) x < 0))), NA)
# A B
#1 NA NA
#2 2 1
#3 NA NA
或者
df[which(!rowSums(df >= 0) == NCOL(df)),] = NA
df
# A B
#1 NA NA
#2 2 1
#3 NA NA