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)
)
)