R data.table удаляет столбцы, оканчивающиеся на "_nd" - PullRequest
6 голосов
/ 24 апреля 2020

У меня есть дата в R

Я хочу удалить столбцы, оканчивающиеся на "_ nd" .

Мой dt:

Я бы хотел

Я хочу противоположность этому скрипт

dt[,.SD, .SDcols = patterns("_nd")] 

спасибо за помощь

Ответы [ 4 ]

3 голосов
/ 24 апреля 2020

Одним из подходов может быть grep внутри J.

dt[,names(dt)[grep("_nd",names(dt))] := NULL]

Преимущество этого подхода состоит в том, что он удаляется по ссылке.

3 голосов
/ 24 апреля 2020

Я сделаю:

library(data.table)

dt <- data.table(var1 = 1:10, var1_n = 1:10, var2_n = 1:10)
dt
#     var1 var1_n var2_n
#    <int>  <int>  <int>
# 1:     1      1      1
# 2:     2      2      2
# 3:     3      3      3
# 4:     4      4      4
# 5:     5      5      5
# 6:     6      6      6
# 7:     7      7      7
# 8:     8      8      8
# 9:     9      9      9
# 10:    10     10     10

to_rm <- grep("_n$", names(dt), value = TRUE)
dt[, (to_rm) := NULL]
dt
#     var1
#    <int>
# 1:     1
# 2:     2
# 3:     3
# 4:     4
# 5:     5
# 6:     6
# 7:     7
# 8:     8
# 9:     9
# 10:    10

или, может быть, проще:

dt <- data.table(var1 = 1:10, var1_n = 1:10, var2_n = 1:10)
dt[, .SD, .SDcols = grep("_n$", names(dt), invert = TRUE, value = TRUE)]

Это также будет работать:

dt <- data.table(var1 = 1:10, var1_n = 1:10, var2_n = 1:10)
to_keep <- grep("_n$", names(dt), invert = TRUE, value = TRUE)
dt[, ..to_keep]
2 голосов
/ 24 апреля 2020

Вы можете использовать set. Просто передайте в качестве символьного вектора столбцы, которые вы хотите удалить.

library(data.table)

set(dt, j=grep("_nd$", names(dt), value=TRUE), value=NULL)
2 голосов
/ 24 апреля 2020

вы можете использовать это в base-R

mydata[-grep("_nd$",names(mydata))]

вывод:

  dtniass sex country age
1 2020-02   M       J  NA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...