Как объединить два кадра данных без общего столбца - PullRequest
0 голосов
/ 09 октября 2018

Я хотел бы объединить 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 

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Если метод перевода между двумя 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)

0 голосов
/ 09 октября 2018

1.Если строки точно совпадают:

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

2.Если у вас есть точечные данные

Лучше всего использовать, если 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...