Merge multiple variables in R

前端 未结 6 1716
闹比i
闹比i 2020-12-04 01:06

I have a dataset such that the same variable is contained in difference columns for each subject. I want to merge them to the same columns.

E.g.:, I have this dataf

6条回答
  •  有刺的猬
    2020-12-04 01:29

    Another solution similar to @userR, but rather than creating each column individually, this creates a list of expressions that get evaluated all at once. It may still suffer the same "don't splice data frames into calls with !!!" fault that was mentioned in the comments since it uses select(.), but I thought I would post anyways.


    library(rlang)
    library(dplyr)
    
    df <- data.frame(ID = c(1,2,3), DV1_A=c(1,NA,NA), 
                     DV1_B= c(NA,4,NA), DV1_C = c(NA,NA,5), 
                     DV2_A=c(3,NA,NA), DV2_B=c(NA,3,NA), 
                     DV2_C=c(NA,NA,5), FACT = c("A","B","C"))
    
    create_DV <- function(num) {
      DV_name <- sym(paste0("DV_", num))
      DV_char <- paste0("DV", num)
    
      expr(!! DV_name := select(., contains(!! DV_char)) %>% rowSums(na.rm = TRUE))
    }
    
    DV_expr_list <- c(1,2) %>% 
      lapply(create_DV)
    
    df %>%
      mutate(
        !!! DV_expr_list
      )
    #>   ID DV1_A DV1_B DV1_C DV2_A DV2_B DV2_C FACT DV_1 DV_2
    #> 1  1     1    NA    NA     3    NA    NA    A    1    3
    #> 2  2    NA     4    NA    NA     3    NA    B    4    3
    #> 3  3    NA    NA     5    NA    NA     5    C    5    5
    

提交回复
热议问题