Измените формат данных с X1, Y1, X2, Y2 на X, Y1, Y2 в R - PullRequest
1 голос
/ 24 января 2020

У меня есть фрейм данных df с комбинациями XY следующим образом

> df <- data.frame(X1=c(1:4),Y1=c(16:13),X2=c(4:7),Y2=c(-1:-4))
> df
  X1 Y1 X2 Y2
1  1 16  4 -1
2  2 15  5 -2
3  3 14  6 -3
4  4 13  7 -4

и я хочу изменить df до df2 путем слияния X1 и X2 в новую переменную X добавление NA, где Y1 или Y2 остаются без значения.

Результат будет выглядеть следующим образом

> df2
  X  Y1  Y2
1 1  16  NA
2 2  15  NA
3 3  14  NA
4 4  13  -1
5 5  NA  -2
6 6  NA  -3
7 7  NA  -4

Какой самый эффективный способ сделать это?

Ответы [ 2 ]

3 голосов
/ 24 января 2020

Использование merge из base R

merge(df[c('X1', 'Y1')], df[c('X2', 'Y2')], by.x = 'X1', by.y = 'X2', all = TRUE)
3 голосов
/ 24 января 2020

Вы можете использовать dplyr::full_join:

df2 <- dplyr::full_join(df[, c("X1", "Y1")], df[, c("X2", "Y2")], by = c("X1" = "X2"))
names(df2)[1] <- "X"
df2
#  X Y1 Y2
#1 1 16 NA
#2 2 15 NA
#3 3 14 NA
#4 4 13 -1
#5 5 NA -2
#6 6 NA -3
#7 7 NA -4
...