【问题标题】:Filter dataframe by vector of column names and constant column names按列名和常量列名的向量过滤数据框
【发布时间】:2018-08-31 09:51:05
【问题描述】:

这当然很容易,但对于我来说,我找不到正确的语法。

我想保留所有“ID_”列,无论列数和附加的数字如何,并通过常量名称保留其他列。

类似于下面的命令不起作用(每次都在重新创建的数据上):

###Does not work, but shows what I am trying to do
testdf1 <- df1[,c(paste(idvec, collapse="','"),"ConstantNames_YESwant")]

重新创建的数据:

rand <- sample(1:2, 1)
if(rand==1){
  df1 <- data.frame(
    ID_0=0,
    ID_1=1,
    ID_2=11,
    ID_3=111,
    LotsOfColumnsWithVariousNames_NOwant="unwanted_data",
    ConstantNames_YESwant="wanted_data",
    stringsAsFactors = FALSE
  )
  desired.df1 <- data.frame(
    ID_0=0,
    ID_1=1,
    ID_2=11,
    ID_3=111,
    ConstantNames_YESwant="wanted_data",
    stringsAsFactors = FALSE
  )
}
if(rand==2){
  df1 <- data.frame(
    ID_0=0,
    ID_1=1,
    LotsOfColumnsWithVariousNames_NOwant="unwanted_data",
    ConstantNames_YESwant="wanted_data",
    stringsAsFactors = FALSE
  )
  desired.df1 <- data.frame(
    ID_0=0,
    ID_1=1,
    ConstantNames_YESwant="wanted_data",
    stringsAsFactors = FALSE
  )
}

【问题讨论】:

  • 什么是idvec
  • ID 名称,我正在使用 grepl 来剪切 ID `justid

标签: r dataframe filter


【解决方案1】:

在基础 R 中,你可以这样做

#Get all the ID columns
idvec <- grep("ID", colnames(df1), value = TRUE)
#Select ID columns and the constant names you want. 
df1[c(idvec, "ConstantNames_YESwant")]

#  ID_0 ID_1 ConstantNames_YESwant
#1    0    1           wanted_data

【讨论】:

    【解决方案2】:

    这是你想要的吗?

    library(tidyverse)
    
    df1 %>% 
      select(matches("ID_*"), ConstantNames_YESwant)
    
    df1 %>% 
      select(starts_with("ID"), ConstantNames_YESwant)
    
    # ID_0 ID_1 ConstantNames_YESwant
    # 1    0    1           wanted_data
    

    【讨论】:

    • 是的,这就是我要找的。漂亮的 dplyr 管道,很好的电话。您也可以只使用库(dplyr)。谢谢!
    猜你喜欢
    • 2019-02-06
    • 1970-01-01
    • 2021-04-18
    • 2014-06-02
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多