Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如果变量A或B中的值为';不适用;,然后改为使用变量C和D中的值?_R_If Statement - Fatal编程技术网

R 如果变量A或B中的值为';不适用;,然后改为使用变量C和D中的值?

R 如果变量A或B中的值为';不适用;,然后改为使用变量C和D中的值?,r,if-statement,R,If Statement,我试图计算两个变量的平均值,并将其作为一个新变量输出。例如: data$Average <- (data$Visit1 + data$Visit2) / 2 data$Average这里是编辑问题的另一个选项,使用dplyr::case_过滤可能性: library(dplyr) data$Average <- case_when(!is.na(data$Visit1) & !is.na(data$Visit2) ~

我试图计算两个变量的平均值,并将其作为一个新变量输出。例如:

data$Average <- (data$Visit1 + data$Visit2) / 2

data$Average这里是编辑问题的另一个选项,使用
dplyr::case_
过滤可能性:

library(dplyr)

data$Average <- case_when(!is.na(data$Visit1) & !is.na(data$Visit2) ~ 
                                        (data$Visit1 + data$Visit2) / 2,
                          !is.na(data$Visit3) & !is.na(data$Visit4) ~ 
                                        (data$Visit3 + data$Visit4) / 2,
                          TRUE ~ (data$Visit1 + data$Visit2) / 2)
库(dplyr)

data$Average执行多个
ifelse
语句的好方法是在
case\u时执行

library(dplyr)

dat <- dat %>%
   mutate(
     average = case_when(
     !is.na(Visit1) & !is.na(Visit2) ~ (Visit1 + Visit2)/2,
     !is.na(Visit3) & !is.na(Visit4) ~ (Visit3 + Visit4)/2,
     !is.na(Visit5) & !is.na(Visit6) ~ (Visit5 + Visit6)/2,
     TRUE ~ NA
     )
   )
库(dplyr)
dat%
变异(
平均值=情况(
!is.na(Visit1)和!is.na(Visit2)~(Visit1+Visit2)/2,
!is.na(Visit3)和!is.na(Visit4)~(Visit3+Visit4)/2,
!is.na(Visit5)和!is.na(Visit6)~(Visit5+Visit6)/2,
真的~NA
)
)
这种方法的优点是:a)使用
tidyverse
,并且适用于多个
ifelse
语句的许多情况,b)稍后返回代码时容易理解,c)如果某些行不满足您的条件(即TRUE~NA),则使用NA

有关
案例的更多文档,当
在此处时:

您可以从
dplyr
使用
coalesce()
coalesce()
将在每个位置使用第一个非缺失值。我认为这比
ifelse()
case\u when()
具有更好的可读性


我会使用
rowMeans(数据[c(“Visit1”、“Visit2”)],na.rm=TRUE)
很遗憾,这并没有回答我的问题。
data %>% 
  mutate(
    Average = coalesce(
      as.numeric((data$Visit1 + data$Visit2) / 2),
      as.numeric((data$Visit3 + data$Visit4) / 2),
      as.numeric((data$Visit5 + data$Visit6) / 2)
    )
  )