问题描述
我想将 ifelse
函数应用于所有带有“GOOD”的行
我的df如下:
item <- c("A","A","B","C")
volume <- c("10","2","4","6","3","6")
general_flag <- c("GOOD","DROP","GOOD","GOOD")
我正在努力
df$general_flag <- SparkR::when(df$item %in% c("B") & df$general_flag %in% c("GOOD"),ifelse(df$volume <= 5,"GOOD"))
甚至
df$general_flag <- df[df$item %in% c("B") & df$general_flag %in% c("GOOD"),]$volume <= 5,"GOOD"))
但它使一般标志中的其他所有内容为空,同时仅遵循子集的条件,结果如下
item <- c("A","C")
volume <- c("10","6")
general_flag <- c(null,null,null)
我想得到如下输出:
item <- c("A","GOOD")
解决方法
我们可以使用case_when
library(dplyr)
df %>%
mutate(general_flag = case_when(volume <=5 & item == 'B'~ "DROP",TRUE ~ general_flag))
-输出
# item volume general_flag
#1 A 10 GOOD
#2 A 2 DROP
#3 B 4 DROP
#4 B 6 GOOD
#5 B 3 DROP
#6 C 6 GOOD
或者用ifelse
df %>%
mutate(general_flag = ifelse(volume <= 5 & item == "B","DROP",general_flag))
数据
df <- data.frame(item,volume,general_flag)