使用 melt -R 创建多个 variable/value 列
create multiple variable/value columns with melt - R
> df <- data.frame(g=c(1,2,3,1,2,3), foo_x=c(12,32,14,23,12,34), foo_y=c(32,35,12,12,32,34), bar_x=c(100,233,122,433,122,442), bar_y=c(744,546,236,137,652,235))
我正在尝试创建此数据框:
g foo bar val_foo val_bar
1 x x 12 100
2 x x 32 233
3 x x 14 122
1 x y 32 744
2 x y 35 546
3 x y 12 236
1 y x 23 433
2 y x 12 122
3 y x 34 442
1 y y 12 137
2 y y 32 652
3 y y 34 235
我想我应该使用 melt
函数,但我如何创建两个不同的变量(foo
和 bar
)和值(val_foo
和 val_bar
) 列? melt(df, id.vars="g")
只创建一个 variable/value 对。
我们可以对多组列使用pivot_longer
library(dplyr)
library(tidyr)
df %>%
pivot_longer(cols = -g, names_to = c(".value", "grp"), names_sep="_")
或 melt
来自 data.table
library(data.table)
melt(setDT(df), measure = patterns("^foo", "^bar"),
value.name = c("val_foo", "val_bar"))
或如@markus 所述base R
reshape(df, idvar = "g", varying = list(2:3, 4:5), sep = "_",
direction = "long", v.names = c("val_foo", "val_bar"), new.row.names = 1:12)
> df <- data.frame(g=c(1,2,3,1,2,3), foo_x=c(12,32,14,23,12,34), foo_y=c(32,35,12,12,32,34), bar_x=c(100,233,122,433,122,442), bar_y=c(744,546,236,137,652,235))
我正在尝试创建此数据框:
g foo bar val_foo val_bar
1 x x 12 100
2 x x 32 233
3 x x 14 122
1 x y 32 744
2 x y 35 546
3 x y 12 236
1 y x 23 433
2 y x 12 122
3 y x 34 442
1 y y 12 137
2 y y 32 652
3 y y 34 235
我想我应该使用 melt
函数,但我如何创建两个不同的变量(foo
和 bar
)和值(val_foo
和 val_bar
) 列? melt(df, id.vars="g")
只创建一个 variable/value 对。
我们可以对多组列使用pivot_longer
library(dplyr)
library(tidyr)
df %>%
pivot_longer(cols = -g, names_to = c(".value", "grp"), names_sep="_")
或 melt
来自 data.table
library(data.table)
melt(setDT(df), measure = patterns("^foo", "^bar"),
value.name = c("val_foo", "val_bar"))
或如@markus 所述base R
reshape(df, idvar = "g", varying = list(2:3, 4:5), sep = "_",
direction = "long", v.names = c("val_foo", "val_bar"), new.row.names = 1:12)