根据其他行中的条件标记行

时间:2019-04-18 21:10:05

标签: r dplyr

要根据其他行中的条件用type==NA标记行。

条件是; 查找type!=NA行,并使用其sd_value确定type==NA行的新标签。 type2

那样

df <- data.frame(value = c(0.5,0.6,1,1.2), sd_value=c(0.1,0.5,0.2,0.8),
                 type = c("good", NA,"bad",NA))

value sd_value type
1   0.5      0.1 good
2   0.6      0.5   NA
3   1.0      0.2  bad
4   1.2      0.8   NA  

第二行值位于type=="good"的2 * sd_value内,第四行值位于type=="bad"的2 * sd_value内,因此应标记type列中的NA行“好”和“坏”。

我尝试过

library(dplyr)




  df%>%
  mutate(type2=ifelse(is.na(type),as.character(type[which(value>value-sd_value*2&value<value+sd_value*2)]),NA))



 value sd_value type type2
1   0.5      0.1 good  good
2   0.6      0.5   NA    NA
3   1.0      0.2  bad   bad
4   1.2      0.8   NA    NA

但预期输出应该是

 value sd_value type type2
1   0.5      0.1 good  good
2   0.6      0.5   NA  good
3   1.0      0.2  bad   bad
4   1.2      0.8   NA   bad

如何分配我想要的type2列?

thx

1 个答案:

答案 0 :(得分:0)

尝试一下:

library(tidyverse)
df %>%
 mutate(type2 = case_when(is.na(type) & 
                          (value > value - 2*sd_value & 
                           value < value - 2*sd_value) ~ "good",
                          is.na(type) ~ "bad",
                          TRUE ~ type))