[英]Joining two dataframes in R
抱歉,如果這是一個超級基本的問題,但我在處理我的 R 項目時遇到了問題。 基本上我有兩個數據框對象,一個是基因及其在各種患者中的表達水平的主列表,另一個是大小僅為一列的對象。 然后,只有一列是屬於特定基因子類別的基因列表,所有這些基因都在主列表中。 我正在嘗試創建一個數據框,其中包含我的特定基因子集及其在主列表中包含的不同患者中的表達。 我嘗試使用 merge() function 但只創建了一個空的 dataframe 。
基本上代碼類似於:new_dataframe <- merge(master_list, specific_gene_list, by = "gene")。 我認為這段代碼應該查看我的主列表,找到特定列表中的所有基因,然后只獲取這些基因並添加患者表達的列,但是我的數據框是空的,它創建了一個 dataframe 與所有主列列表但沒有填寫任何值。非常感謝任何幫助。
一個視覺示例:
主數據框
×:1
是:3
z: 4
w: 6
具體數據框:
X
是的
所需的數據框:
×:1
是:3
我們可以使用來自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))
您還可以用冒號拆分列並添加一個新列來合並數據框。
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
您可以使用separate
master_list
中的列,使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.