【问题标题】:removing columns based on segment of column names根据列名段删除列
【发布时间】:2022-10-15 00:32:05
【问题描述】:

我有一个包含多列(接近 100 列)的数据框,我不需要中间有“CNT”。下面是一个简短的例子:

id   drink  drink_CNT_v2   sage_CNT_v5
1      12        23             12
2      14        32             13
3      15        12             12
4      16        12             43
5      20        50             23  

我想删除所有中间有 CNT 的变量。有谁知道我怎么能做到这一点。我尝试在 tidyverse 中使用 mutate ,但这没有用。

【问题讨论】:

    标签: r dataframe tidyverse


    【解决方案1】:

    我们可以在select 中使用contains

    library(dplyr)
    df2 <- df1 %>%
       select(-contains("_CNT_"))
    

    -输出

    df2 
      id drink
    1  1    12
    2  2    14
    3  3    15
    4  4    16
    5  5    20
    

    数据

    df1 <- structure(list(id = 1:5, drink = c(12L, 14L, 15L, 16L, 20L), 
        drink_CNT_v2 = c(23L, 32L, 12L, 12L, 50L), sage_CNT_v5 = c(12L, 
        13L, 12L, 43L, 23L)), class = "data.frame", row.names = c(NA, 
    -5L))
    

    【讨论】:

    • 那行得通-谢谢!
    【解决方案2】:

    在基础 R 中,使用 grepl

    df[!grepl("CNT", colnames(df))]
    

    也适用于select(使用grep):

    df %>% 
      select(-grep("CNT", names(.)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      • 2015-04-16
      • 2022-12-07
      • 1970-01-01
      • 2013-06-17
      • 2015-11-14
      相关资源
      最近更新 更多