Самый быстрый способ подмножества выбранных столбцов из набора данных с помощью R - PullRequest
1 голос
/ 17 июня 2020

У меня есть df1, содержащий одну строку переменных, которые мне нужны, и df2, в котором больше переменных и много строк. Я просто хочу извлечь столбцы из df2, которые существуют в df1. Каков самый простой и быстрый способ сделать это? В настоящее время я использую for loop, но он очень медленный, и я думаю, что должен быть более простой способ сделать это.

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Использовать инфиксный оператор %in% быстрее.

names(df2)[names(df2) %in% names(df1)]

Протестировано с пакетом microbenchmark.

mb <- microbenchmark(
  Intersect = intersect(names(df1), names(df2)),
  In = names(df2)[names(df2) %in% names(df1)]
)
print(mb, unit = 'relative', order = 'median')
#Unit: relative
#      expr      min       lq     mean   median       uq      max neval
#        In 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000   100
# Intersect 5.536585 5.335227 3.530118 4.497696 5.053942 1.339408   100

Тестовые данные

set.seed(2020)
df1 <- as.data.frame(as.list(1:10))
names(df1) <- sprintf("Col%d", c(1:3, 6:10, 14, 15))
df2 <- as.data.frame(t(replicate(1e2, sample(20, 10))))
names(df2) <- sprintf("Col%d", c(1:5, 7:10, 12))
1 голос
/ 17 июня 2020

Мы можем использовать intersect

subdf2 <- df2[intersect(names(df1), names(df2))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...