根据以相同字符开头的列创建新变量

时间:2021-02-23 15:37:33

标签: r

我有一个数据框,其中包含一系列名称以相同字符开头的变量:

dat<-data.frame(q1.1=sample(c('answered', NA), 10000, replace=TRUE),
                q1.2=sample(c('answered', NA), 10000, replace=TRUE),
                q1.3=sample(c('answered', NA), 10000, replace=TRUE),
                q1.4=sample(c('answered', NA), 10000, replace=TRUE),
                q1.5=sample(c('answered', NA), 10000, replace=TRUE),
                q1.6=sample(c('answered', NA), 10000, replace=TRUE),
                q1.7=sample(c('answered', NA), 10000, replace=TRUE),
                q1.8=sample(c('answered', NA), 10000, replace=TRUE))

我想根据这些变量创建一个新变量,其中所有这些变量都是 NA 的观察值以一种方式编码(如“否”),其余观察值以另一种方式编码(如“是”) ).我知道这可以通过以下方式完成,但我觉得它太啰嗦了(尤其是在同一个脚本中必须多次完成时):

library(tidyverse)
dat<- dat %>% mutate(new_var=ifelse(is.na(q1.1) &
                             is.na(q1.2) &
                             is.na(q1.3)&
                             is.na(q1.4)&
                             is.na(q1.5)&
                             is.na(q1.6)&
                             is.na(q1.7)&
                             is.na(q1.8), 
                           "no",
                           "yes"))

是否可以这样写,如果所有以 q1 开头的变量都是 NA,则新变量应编码为“no”,否则应编码为“yes”。我曾尝试像这样 dat<- dat %>% mutate(new_var=ifelse( is.na(contains("q1")),"No","Yes")) 执行此方法,但出现错误。

0 个答案:

没有答案