Объединение двух фреймов данных в R - PullRequest
0 голосов
/ 12 июля 2020

Извините, если это супер базовый c вопрос, но я столкнулся с проблемой во время работы над моим проектом R. В основном у меня есть два объекта фрейма данных, один из которых является основным списком генов и их уровнем экспрессии у разных пациентов, а другой - размером всего в один столбец. Тогда один только с одним столбцом представляет собой список генов, которые подпадают под конкретную подкатегорию c генов, все из которых находятся в главном списке. Я пытаюсь создать фрейм данных, где у меня есть определенное c подмножество генов И их экспрессия у разных пациентов, которая содержится в главном списке. Я пробовал использовать функцию merge (), но был создан только пустой фрейм данных.

В основном код выглядит примерно так: new_dataframe <- merge (master_list, specific_gene_list, by = "gene"). Я думал, что этот код должен посмотреть на мой главный список, найти все гены в списке спецификаций c, а затем взять только эти гены и добавить столбцы для выражения пациента, однако мой фрейм данных пуст, он создает фрейм данных со всеми столбцами главного списка, но не заполнены значения. Любая помощь приветствуется. </p>

Наглядный пример:

Фрейм основных данных

x: 1

y: 3

z: 4

w: 6

Specifi c кадр данных:

x

y

Желаемый фрейм данных:

x: 1

y: 3

Ответы [ 3 ]

2 голосов
/ 12 июля 2020

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

library(fuzzyjoin)
df3 <-  regex_inner_join(df1, df2, by = 'gene') %>% 
      transmute(gene = gene.x)
df3
#   gene
#1 x: 1
#2 y: 3

данные

df1 <- structure(list(gene = c("x: 1", "y: 3", "z: 4", "w: 6")),
   class = "data.frame", row.names = c(NA, 
-4L))

df2 <- structure(list(gene = c("x", "y")), class = "data.frame", row.names = c(NA, 
-2L))
0 голосов
/ 13 июля 2020

Вы можете разделить столбцы в master_list, используя separate, соединить с specific_gene_list и снова объединить столбцы с unite.

library(dplyr)
library(tidyr)

master_list %>%
  separate(gene, c('gene', 'value'), sep = ':\\s*') %>%
  inner_join(specific_gene_list, by = 'gene') %>%
  unite(gene, gene, value, sep = " : ")

#   gene
#1 x : 1
#2 y : 3
0 голосов
/ 13 июля 2020

Вы также можете разделить столбец двоеточием и добавить новый столбец для объединения фреймов данных.

mergecol <- c("x: 1",
"y: 3",
"z: 4",
"w: 6")

df <- cbind(mergecol, as.data.frame(do.call(rbind, strsplit(mergecol, ':'))))
df2 <- data.frame(V1 = c('x', 'y'))

mergedf <- merge(df, df2, by="V1")


result <- c('x: 1', 'y: 3')

assertthat::are_equal(result, mergedf$mergecol)
#[1] TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...