Как извлечь строки из нескольких таблиц данных для определенных значений для столбца, используя R? - PullRequest
3 голосов
/ 01 апреля 2020

У меня есть несколько таблиц данных с похожей структурой. Я хочу найти определенные значения в column1 каждой таблицы и извлечь строки в новый файл. Например:

dt1:
X     Y    Z
cat   12   a
dog   13   b
man   14   c
bird  6    d

dt2  
X     Y     Z
cat   10    a
dog   11    c
man   14    d
woman 15    m

Я хочу извлечь строки с X как «собака» или «женщина», как в «dt1», так и в «dt2»

Окончательный вывод, как это-

dt     X     Y    Z

dt1   dog   13    b
dt2   dog   11    c
dt2   woman 15    m

Ответы [ 3 ]

2 голосов
/ 01 апреля 2020

Код:

do.call('rbind', list(do.call('cbind', list(dt = 'dt1', df1[df1$X %in% c('dog', 'woman'), ])),
                      do.call('cbind', list(dt = 'dt2', df2[df2$X %in% c('dog', 'woman'), ]))))

#     dt     X  Y Z
# 2  dt1   dog 13 b
# 21 dt2   dog 11 c
# 4  dt2 woman 15 m

Данные:

df1 <- read.table(text='X     Y    Z
cat   12   a
                  dog   13   b
                  man   14   c
                  bird  6    d', header = TRUE, stringsAsFactors = FALSE)

df2 <- read.table(text = 'X     Y     Z
cat   10    a
                  dog   11    c
                  man   14    d
                  woman 15    m', header = TRUE, stringsAsFactors = FALSE)
2 голосов
/ 01 апреля 2020

С dplyr вы можете сделать:

bind_rows(mget(ls(pattern = "df")), .id = "df") %>%
 filter(X %in% c("woman", "dog"))

   df     X  Y Z
1 df1   dog 13 b
2 df2   dog 11 c
3 df2 woman 15 m
1 голос
/ 01 апреля 2020

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

library(data.table)
rbindlist(mget(paste0('df', 1:2)), idcol = 'df')[X %in% c('woman', 'dog')]
#    df     X  Y Z
#1: df1   dog 13 b
#2: df2   dog 11 c
#3: df2 woman 15 m
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...