用 R 中的 X1、Y1、X2、Y2 将数据框重塑为 X、Y1、Y2
Reshape a dataframe with X1, Y1,X2,Y2 to X, Y1, Y2 in R
我有一个数据框 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
并希望通过将 X1
和 X2
合并到一个新变量 X
并添加 NA
来将 df
重塑为 df2
,其中 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
最有效的方法是什么?
您可以使用 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
使用 base R
中的 merge
merge(df[c('X1', 'Y1')], df[c('X2', 'Y2')], by.x = 'X1', by.y = 'X2', all = TRUE)
我有一个数据框 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
并希望通过将 X1
和 X2
合并到一个新变量 X
并添加 NA
来将 df
重塑为 df2
,其中 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
最有效的方法是什么?
您可以使用 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
使用 base R
merge
merge(df[c('X1', 'Y1')], df[c('X2', 'Y2')], by.x = 'X1', by.y = 'X2', all = TRUE)