ifelse语句的“else”部分不起作用。不管我在“else”参数中放了什么,它都返回NA。
以下是一些样本数据:
test<-structure(list(time = c(1, 2, 4, 1, 2, 4, 1, 2, 4, 1, 2, 4, 1,
2, 4, 1, 2, 4, 1, 2, 4, 1, 2, 4, 1, 2, 4, 1, 2, 4, 1, 2, 4, 1,
2, 4, 1, 2, 4, 1, 2, 4, 1, 2, 4, 1, 2, 4, 1, 2, 4, 1, 2, 4, 1,
2, 4, 1, 2, 4, 1, 2, 4), nowsmoke = c(NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, TRUE, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, TRUE, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), eversmoke = c(NA,
NA, TRUE, NA, NA, TRUE, NA, NA, NA, NA, NA, TRUE, NA, NA, NA,
NA, NA, NA, NA, NA, TRUE, NA, NA, NA, NA, NA, TRUE, NA, NA, TRUE,
NA, NA, TRUE, NA, NA, NA, NA, NA, TRUE, NA, NA, NA, NA, NA, TRUE,
NA, NA, NA, NA, NA, TRUE, NA, NA, TRUE, NA, NA, NA, NA, NA, NA,
NA, NA, TRUE)), row.names = c(NA, 63L), class = "data.frame")
下面是一个ifelse语句的例子,我一直在努力工作:
test$nowsmoke<-ifelse(test$nowsmoke==TRUE,TRUE,FALSE)
这里是另一个:
long_data_cancer_ceramide$smoker_4<-
ifelse(long_data_cancer_ceramide$nowsmoke==TRUE,
3,
ifelse(is.na(long_data_cancer_ceramide$nowsmoke) &
long_data_cancer_ceramide$eversmoke==TRUE,
2,
ifelse(is.na(long_data_cancer_ceramide$nowsmoke)&
is.na(long_data_cancer_ceramide$eversmoke)&
long_data_cancer_ceramide$time==4,
1,
NA
)
)
)
看起来我能够让语句的前两部分工作(if,then)。但是else总是返回NA。所以第二个ifelse语句在“3”之后停止工作,
2条答案
按热度按时间bttbmeg01#
您需要重新排序
ifelse
语句中的条件,其中您需要首先测试is.na
。如果您首先测试条件if TRUE
,则NA
条目将不适合后续的ifelse
,因为NA
既不是TRUE
也不是FALSE
,因此不会在ifelse
循环中进行计算。另一个建议:如果
value
已经是逻辑的,你不需要测试if value == TRUE
,只要if value
就可以了。if !value
测试if value == FALSE
gijlo24d2#
交替编码