【问题标题】:Nested loop in r giving conditionsr中的嵌套循环给出条件
【发布时间】:2019-04-05 00:25:18
【问题描述】:
    CLID <-c(1,2,1,2)
SUBJ<- c(1,2,3,4)

df<-cbind.data.frame(CLID,SUBJ)

for (TRT in df$CLID){
  for (SUB in df$SUBJ){
if (CLID == 1 & SUBJ==1) {
  df$TRT <- paste("A") 
 } else if  (CLID==1 & SUBJ==2) {
   df$TRT <- paste("B")
  }else if (CLID==1 & SUBJ==4) {
  (TRT <- "C")
  df$TRT <- paste("C")
  }else {
  df$TRT <- paste("NA")
    }
    }
  }

我正在尝试使用主题和 CLID 的独特组合创建一个新列。预期的代码正在创建一个新列,但输出与预期不同。它应该是两者的结合,但事实并非如此。我如何确保创建的新列是这两个条件的组合?

预期的结果是这样的:

CLID <-c(1,2,1,2)
SUBJ<- c(1,2,3,4)
TRT<-c("A","NA","NA","C")

df_expected<-cbind.data.frame(CLID,SUBJ,TRT)

【问题讨论】:

    标签: r for-loop conditional rstudio nested-loops


    【解决方案1】:

    你可以试试这个。虽然它与您的预期输出不匹配。如果 CLID == 2 和 SUBJ == 4 则 TRT 应该是 C。

    library(dplyr)
    
    df %>%
      mutate(TRT = case_when(
        CLID == 1 & SUBJ == 1 ~ "A",
        CLID == 1 & SUBJ == 2 ~ "B",
        CLID == 1 & SUBJ == 4 ~ "C"
      ))
    #>   CLID SUBJ  TRT
    #> 1    1    1    A
    #> 2    2    2 <NA>
    #> 3    1    3 <NA>
    #> 4    2    4 <NA>
    

    编辑

    这是执行相同操作的循环

    for(i in 1:nrow(df)){
      if(df$CLID[i] == 1 & df$SUBJ[i] == 1){
        df$TRT[i] <- "A"
      }
      else if(df$CLID[i] == 1 & df$SUBJ[i] == 2){
        df$TRT[i] <- "B"
      }
      else if(df$CLID[i] == 1 & df$SUBJ[i] == 4){
        df$TRT[i] <- "C"
      }
      else{
        df$TRT[i] <- NA
      }
    }
    
    df
    #>   CLID SUBJ  TRT
    #> 1    1    1    A
    #> 2    2    2 <NA>
    #> 3    1    3 <NA>
    #> 4    2    4 <NA>
    

    或使用嵌套ifelse 语句的其他选项。

    df$TRT <- ifelse(df$CLID == 1 & df$SUBJ == 1, "A", 
                     ifelse(df$CLID == 1 & df$SUBJ == 2, "B",
                            ifelse(df$CLID == 1 & df$SUBJ == 4, "C", NA)))
    
    df
    #>   CLID SUBJ  TRT
    #> 1    1    1    A
    #> 2    2    2 <NA>
    #> 3    1    3 <NA>
    #> 4    2    4 <NA>
    

    【讨论】:

    • 谢谢。我会努力回来的。我知道 dplyr 有一种使用 mutate 的方法,但不知道是什么功能。
    • 它按预期工作。我想知道您是否可以使用循环显示相同的内容?谢谢
    猜你喜欢
    • 1970-01-01
    • 2019-11-07
    • 2021-01-13
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2021-12-19
    • 2020-10-06
    • 1970-01-01
    相关资源
    最近更新 更多