代码之家  ›  专栏  ›  技术社区  ›  rnorouzian

基于r中的名称向量移除列

  •  0
  • rnorouzian  · 技术社区  · 6 年前

    我有一个 data.frame 打电话 DATA 是的。使用 基R ,我想知道如何删除 数据 其名称如下: ar = c("out", "Name", "mdif" , "stder" , "mpre") 是吗?

    目前,我使用 DATA[ , !names(DATA) %in% ar] 但是,当这删除了不需要的变量时,它又创建了一些新的麻烦的变量后缀 .1 是的。

    提取之后,是否可以只删除后缀?

    注1: 我们无法进入 r ,唯一的输入是 数据 是的。

    注2: 这是玩具数据,一个功能解决方案是赞赏的。

    r <- list(
     data.frame(Name = rep("Jacob", 6), 
               X = c(2,2,1,1,NA, NA), 
               Y = c(1,1,1,2,1,NA), 
               Z = rep(3, 6), 
             out = rep(1, 6)), 
    
     data.frame(Name = rep("Jon", 6), 
               X = c(1,NA,3,1,NA,NA), 
               Y = c(1,1,1,2,NA,NA), 
               Z = rep(2, 6), 
             out = rep(1, 6)))
    
    DATA <- do.call(cbind, r)  ## DATA
    
    ar = c("out", "Name", "mdif" , "stder" , "mpre") # The names for exclusion
    
    DATA[ , !names(DATA) %in% ar]      ## Current solution
    #>
    #    X  Y Z X.1 Y.1 Z.1          ## X.1 Y.1 Z.1  are automatically created but no needed
    # 1  2  1 3   1   1   2
    # 2  2  1 3  NA   1   2
    # 3  1  1 3   3   1   2
    # 4  1  2 3   1   2   2
    # 5 NA  1 3  NA  NA   2
    # 6 NA NA 3  NA  NA   2
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Ronak Shah    6 年前

    理想情况下,列名应该是唯一的,但是如果希望保留重复的列名,我们可以删除 suffixes 使用 sub 提取后

    DATA1 <- DATA[ , !names(DATA) %in% ar] 
    names(DATA1) <- sub("\\.\\d+", "", names(DATA1))
    
    DATA1
    #   X  Y Z  X  Y Z
    #1  2  1 3  1  1 2
    #2  2  1 3 NA  1 2
    #3  1  1 3  3  1 2
    #4  1  2 3  1  2 2
    #5 NA  1 3 NA NA 2
    #6 NA NA 3 NA NA 2