如何在R中转换数据帧?

如何在R中转换数据帧?,r,dataframe,R,Dataframe,我有一个R数据框,形式是 my.data1 = data.frame(sex = c("m", "f"), A = c(1, 2), B = c(3, 4)) my.data2 = data.frame(value = c(1, 2, 3, 4), group = c("A", "A", &

我有一个R数据框,形式是

my.data1 = data.frame(sex = c("m", "f"),
                     A = c(1, 2),
                     B = c(3, 4))
my.data2 = data.frame(value = c(1, 2, 3, 4),
                     group = c("A", "A", "B", "B"),
                     sex = c("m", "f", "m", "f"))
但是,我希望我的数据以

my.data1 = data.frame(sex = c("m", "f"),
                     A = c(1, 2),
                     B = c(3, 4))
my.data2 = data.frame(value = c(1, 2, 3, 4),
                     group = c("A", "A", "B", "B"),
                     sex = c("m", "f", "m", "f"))
因此,基本上,我想将一些以前的列(“A”和“B”)转换为新列“group”下的表单元格,同时将所有以前的表单元格收集到一个新列“value”下

相应地转换数据的最简单方法是什么


提前谢谢

使用
restrape2
melt()
函数可获得与您想要的接近的结果。您可以将变量定义为id,并对数据进行重塑:

library(reshape2)
#Data
my.data1 = data.frame(sex = c("m", "f"),
                      A = c(1, 2),
                      B = c(3, 4))
#Reshape
my.data2 <- melt(my.data1,id.vars = 'sex')
如果您想更进一步,可以使用
tidyverse
方法和
pivot\u longer()
。在此函数中,还必须使用
cols
参数将引用列设置为id:

library(tidyverse)

my.data1 %>% pivot_longer(cols = -sex)
输出:

  sex variable value
1   m        A     1
2   f        A     2
3   m        B     3
4   f        B     4
# A tibble: 4 x 3
  sex   name  value
  <fct> <chr> <dbl>
1 m     A         1
2 m     B         3
3 f     A         2
4 f     B         4
#一个tible:4 x 3
性别名称值
1米A 1
2MB3
3 f A 2
4 f B 4