R 如果向量y的对应值不是“否”,我想用“是”替换向量x中的每个值

R 如果向量y的对应值不是“否”,我想用“是”替换向量x中的每个值,r,R,在R中使用此代码: x <- c("No", "Yes", "No") y <- c("Yes", "No", "No") df <- data.frame(x, y) my.yes <- function(x,y) { for (i in length(x)){ x[i] <<- ifelse(x[i]=="No&quo

在R中使用此代码:

x <- c("No", "Yes", "No")
y <- c("Yes", "No", "No")
df <- data.frame(x, y)

my.yes <- function(x,y) {
  for (i in length(x)){
  x[i] <<- ifelse(x[i]=="No" && y[i]!="No", "Yes", "No")
  }
}

my.yes(df$x, df$y)
我希望df中的x是这样的:是的,是的,不是

提前谢谢

我们可以使用pmax

在OP的函数中,我们可以更改&&to&并在ifelse被矢量化时删除循环

with(df, ifelse(x == 'Yes'| y == "Yes", 'Yes', 'No'))
#[1] "Yes" "Yes" "No" 
它可以被包装成一个函数

my.yes <- function(dat) {
        with(dat, ifelse(x == 'Yes'| y == "Yes", 'Yes', 'No'))
   }
my.yes(df)
我们可以使用pmax

在OP的函数中,我们可以更改&&to&并在ifelse被矢量化时删除循环

with(df, ifelse(x == 'Yes'| y == "Yes", 'Yes', 'No'))
#[1] "Yes" "Yes" "No" 
它可以被包装成一个函数

my.yes <- function(dat) {
        with(dat, ifelse(x == 'Yes'| y == "Yes", 'Yes', 'No'))
   }
my.yes(df)

这是另一个选项,根据条件从返回值向量cNo中提取

rui <- function(df){
  c("No", "Yes")[with(df, x == "Yes" | y == "Yes") + 1]
}

rui(df)
#[1] "Yes" "Yes" "No" 
一个基准测试显示,这一个是三个中最快的,另外两个是最快的


这是另一个选项,根据条件从返回值向量cNo中提取

rui <- function(df){
  c("No", "Yes")[with(df, x == "Yes" | y == "Yes") + 1]
}

rui(df)
#[1] "Yes" "Yes" "No" 
一个基准测试显示,这一个是三个中最快的,另外两个是最快的

另一种bae解决方案:

deni = function(df){
  df$x[df$y != "No"] <- "Yes"
  return(df$x)
}
另一种bae解决方案:

deni = function(df){
  df$x[df$y != "No"] <- "Yes"
  return(df$x)
}

如果x和y都是是,那么预期输出是什么?如果两者都是是,那么将其保留为是如果x和y都是是,那么预期输出是什么?如果两者都是是,那么将其保留为是您编写的函数本质上是替换x,y!=不,是+1我不知道替换,谢谢!更具可读性实际上您编写的函数本质上是replacex,y!=不,是+1我不知道替换,谢谢!更容易阅读