[英]Nested loop in r giving conditions
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")
}
}
}
我试图用Subject和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)
你可以试试看。 但是,它与您的预期输出不匹配。 如果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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.