我有一个类似的数据帧
x1 <- c(1,2,3)
x2 <- c(5,6,7)
df <- data.frame(x1,x2)
我想将这两列x1和x2合并为一列,其中包含所有值。此外,我想创建一个新列,说明我的数据点来自这两列中的哪一列。我想要的输出如下:
x <- c(1,2,3,4,5,6)
orig <- c("x1","x1","x1","x2","x2","x2")
df_merged <- data.frame(x,orig)
我搜索了很多列的合并、组合和分组,但显然这不是这个过程的名称。感谢您提前提供的帮助。
您可以在tidyr
中使用整形函数pivot_longer
library(tidyr)
pivot_longer(df, cols = everything())
# name value
# <chr> <dbl>
#1 x1 1
#2 x2 5
#3 x1 2
#4 x2 6
#5 x1 3
#6 x2 7
或data.table
:中的melt
library(data.table)
melt(setDT(df))
尝试stack
> stack(df)
values ind
1 1 x1
2 2 x1
3 3 x1
4 5 x2
5 6 x2
6 7 x2
使用base R
data.frame(name = rep(names(df), each = nrow(df)), value = unlist(df))
或使用gather
library(tidyr)
gather(df)