如何创建一个非规范化的数据帧,其值和类型来自R中的一组其他变量

如何创建一个非规范化的数据帧,其值和类型来自R中的一组其他变量,r,dataframe,R,Dataframe,因此,我有以下数据框架: > data.frame(id=c(1,2),a=c(10,11),b=c(20,21)) id a b 1 10 20 2 11 21 我想创建一个非规范化的数据框架,它接受两列或更多列的值,并创建两列,一列用于值来自的列,另一列用于值本身,因此最终的数据框架的行数多于列数 结果应该如下所示: > data.frame(id=c(1,1,2,2),x=c(10,20,11,21),type=c("a","b","a","b")) id

因此,我有以下数据框架:

> data.frame(id=c(1,2),a=c(10,11),b=c(20,21))  
id  a  b
1 10 20
2 11 21
我想创建一个非规范化的数据框架,它接受两列或更多列的值,并创建两列,一列用于值来自的列,另一列用于值本身,因此最终的数据框架的行数多于列数

结果应该如下所示:

> data.frame(id=c(1,1,2,2),x=c(10,20,11,21),type=c("a","b","a","b"))
    id  x type
    1 10    a
    1 20    b
    2 11    a
    2 21    b
当然,值的顺序并不重要


谢谢大家

使用tidyverse方法:

library("tidyverse")

your_df <- data.frame(id=c(1,2),a=c(10,11),b=c(20,21))

your_df_long_form <- your_df %>% 
    gather(key = type, value = x, a:b) %>% 
    arrange(id)

尝试
melt
重塑2::melt(data.frame(id=c(1,2),a=c(10,11),b=c(20,21)),1)
  id type  x
1  1    a 10
2  1    b 20
3  2    a 11
4  2    b 21