根据条件更新列中的值

时间:2019-06-26 22:27:41

标签: r dplyr

对于相同study_id和网站的所有对应记录,我需要将x_eligible更新为1,其中x == 1。 每当x_eligible设置为1时,这都是为了覆盖与study_id&site相同的记录的x值。

以下是可复制的代码:

library(tidyverse)
newdata = data.frame(site = c('A','A','A','B','B','B','B'),
                     study_id = c(1,1,2,1,1,1,2),
                     x = c(0,1,0,0,NA,1,0),
                     x_eligible = c(0,1,0,0,0,1,0))

xEligibility2 <- function (x, siteid, studyID){

  el = newdata %>% filter(site == siteid & study_id ==studyID & x_eligible==1)

  if(exists("el"))
    return(ifelse(nrow(el)>=1,1,0))
  else
    return(0)
}

newdata = newdata %>% mutate(
  x_eligible = ifelse(apply(newdata, 1, xEligibility2, siteid=site, studyID=study_id) == 1, 1, 0) 
)

这是我在x_eligible列上得到的结果:

x_eligible = c(1,1,1,1,1,1,1)

x_eligible全部设置为1。

这是我的预期输出:

x_eligible = c(1,1,0,1,1,1,0)

如果能指出我做错了什么,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以按地点和study_id进行分组,并测试x中的任何值是否等于1:

=SUM( (C3:C5<75)*
      (1*(E3:E5>900)+1*(F3:F5>900)>0) )