如何将函数应用于 R 中 SparkR 中的特定行,同时保持早期结果不变 数据

问题描述

我想将 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)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...