Dplyr: подмножество пронумерованных переменных - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть фрейм данных с переменными с такими именами, как 'dtx1', 'dtx2' (...) 'dtx20'.Я хочу выбрать подмножество с помощью «dplyr».Как я могу выбрать все переменные?Я не хочу писать каждое имя: new_df <- select(old_df, dtx1, dtx2, (...), dtx20) Я пробовал несколько поисков здесь и в Google, но у меня может не быть правильного словаря.

Ответы [ 4 ]

0 голосов
/ 07 февраля 2019

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
0 голосов
/ 07 февраля 2019

Допустим, у нас есть фиктивный фрейм данных 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

В основном это соответствует любому виду чисел в конце имен столбцов.

0 голосов
/ 07 февраля 2019

Вы также можете использовать contains, если хотите, чтобы все переменные содержали определенную строку:

new_df = old_df %>% 
    select(contains("dtx")) 
0 голосов
/ 07 февраля 2019

Если вы знаете, откуда и куда вы хотите установить подмножество, вы можете использовать что-то вроде этого:

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

Если вы не знаете, кого вы хотите устранить, но у вас всех есть частьобщего имени, заимствуя из @ Mateusz1981:

DF <- DF[,- grep("dtx",colnames))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...