Как сопоставить по имени строки, содержащей определенный символ, и разделить значения столбца на два кадра данных? - PullRequest
0 голосов
/ 29 марта 2020

Ниже приведен пример примера двух фреймов данных

> print(df1)
                 A  B
84-9-S04.xlsx   198 15
84-12-S01.xlsx  188 19
92-15-S02.xlsx  157 71
84-12-S08.xlsx  138 51
92-12-S01.xlsx  149 19
84-15-S09.xlsx  138 61
92-15-S02.xlsx  158 14
84-12-S08.xlsx  136 23
92-12-S01.xlsx  124 18
84-9-S09.xlsx   113 14

> print(df2)
       D
84-9   2
84-12  3
84-15  2
92-9   5
92-12  7
84-15  2 

Первые два термина имен строк в df1 совпадают с именами строк в df2 (например, «84-9», "92-15"). Я хотел бы разделить все строки в df1, которые содержат то же имя строки, что и в df2, на df2.

Наконец, я хотел бы разделить данные на несколько фреймов данных так, чтобы новые фреймы данных начинались с первых двух терминов имен строк. Имеется в виду один фрейм данных, содержащий все строки, которые начинаются с «84-9», другой фрейм данных, содержащий все строки, которые начинаются с «92-15»

1 Ответ

2 голосов
/ 29 марта 2020

Вот способ использования dplyr. Получите имена строк в виде отдельного столбца, извлеките только соответствующую информацию из столбца, left_join с помощью df2 и разделите данные на D.

library(dplyr)

total_df <- df1 %>%
  rownames_to_column('file') %>%
  mutate(file1 = sub('(\\d+-\\d+).*', '\\1', file)) %>%
  left_join(df2 %>%
              rownames_to_column('file1'), by = 'file1') %>%
  mutate_at(vars(A, B), ~./D)

Если нам нужны данные в отдельных фреймах данных, мы можем split данных и использовать list2env.

list_df <- split(total_df, total_df$file)
names(list_df) <- paste0('df_', names(list_df))
list2env(list_df, .GlobalEnv)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...