Dplyr:子集编号变量很容易

时间:2019-02-07 09:50:50

标签: r dplyr

我有一个带有变量的数据框,变量的编号名称为<a class="nav-link" href="@Url.Action("Index", "Customers")">Customers</a> 。我想选择一个带有'dplyr'的子集。如何选择所有变量?我不想写下每个名字: 'dtx1', 'dtx2' (...) 'dtx20' 我在这里和Google上尝试了多次搜索,但可能没有正确的词汇。

4 个答案:

答案 0 :(得分:0)

如果您知道要从何处进行子集化,则可以使用以下方法:

DF <- dplyr::select(DF, -c(dtxN:dtxM))` #Being N and M the numbers. 

如果您不知道要消除的是哪一种,但您都拥有部分相同的名称,请向@ Mateusz1981借用:

DF <- DF[,- grep("dtx",colnames))]

答案 1 :(得分:0)

假设我们有一个虚拟数据帧old_df

  dtx1 dtx20 dtx d1tx
1    0     0   0    1
2    1     2   0    2

如果您只想保留在字符串末尾编号的列,则可以使用dplyr

library(dplyr)

new_df <- select(old_df, matches("[0-9]+$"))

输出:

  dtx1 dtx20
1    0     0
2    1     2

它基本上与列名末尾的任何数字匹配。

答案 2 :(得分:0)

如果希望所有包含特定字符串的变量,也可以使用contains

new_df = old_df %>% 
    select(contains("dtx")) 

答案 3 :(得分:0)

dplyr::num_range()dplyr::starts_with()可能是一个不错的选择,具体取决于您要保留的内容。

df1 <- data.frame(foo=1,dtx1 = 2, dtx2 = 3, bar = 4, dtx3 = 5, dtx4 = 6)
df1
#   foo dtx1 dtx2 bar dtx3 dtx4
# 1   1    2    3   4    5    6

library(dplyr)

select(df1, num_range("dtx",1:3))
#   dtx1 dtx2 dtx3
# 1    2    3    5

select(df1, starts_with("dtx"))
#   dtx1 dtx2 dtx3 dtx4
# 1    2    3    5    6

这不太安全:

select(df1, dtx1:dtx4)
#   dtx1 dtx2 bar dtx3 dtx4
# 1    2    3   4    5    6