我想合并2个没有通用列的数据框。实际上,这2个数据框具有相同的命名列,但此列中的变量名称几乎没有不同。所以我不能合并它们。
代码示例:
df_1 <- data.frame(gene = c("a1.1", "a2.2"), df_1_value = c("12", "13"))
df_2 <- data.frame(gene = c("a1", "a2"), df_2_value = c("153", "461"))
我想得到:
gene df_1_value df_2_value
a1.1 or a1 (it doesnt matter, both of two is same) 12 153
a2.2 or a2 13 461
我尝试:
df22 <- df_2 %
select(df_2_value)
merge(df_1, df_22)
输出:
gene df_1_value df_2_value
a1.1 12 153
a2.2 13 153
a1.1 12 461
a2.2 13 461
答案 0 :(得分:0)
cbind(df_1, "df_2_value" = df_2[, 2])
gene df_1_value df_2_value
1 a1.1 12 153
2 a2.2 13 461
如果df_2_value
对于所有行都不存在,反之亦然。
df_1$gene <- substr(df_1$gene, 1, 2) # Clean up "gene" column
library(dplyr)
full_join(df_1, df_2, "gene")
gene df_1_value df_2_value
1 a1 12
2 a2 13 461
数据
df_1 <- data.frame(gene = c("a1.1", "a2.2"), df_1_value = c("12", "13"), stringsAsFactors = FALSE)
df_2 <- data.frame(gene = c("a1", "a2"), df_2_value = c("", "461"), stringsAsFactors = FALSE)
答案 1 :(得分:0)
如果在两种gene
格式之间进行转换的方法很明确,则可以尝试使用此技术将这个问题转换为“按列”方法(例如“模糊”方法):
df_1$genemod <- gsub("\\..*", "", df_1$gene)
merge(df_1, df_2, by.x="genemod", by.y="gene")
# genemod gene df_1_value df_2_value
# 1 a1 a1.1 12 153
# 2 a2 a2.2 13 461
(您可以在其中轻松删除或重命名gene
和genemod
任一列)