首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用melt创建多个变量/值列

使用melt创建多个变量/值列
EN

Stack Overflow用户
提问于 2019-11-29 22:38:52
回答 1查看 749关注 0票数 1
代码语言:javascript
复制
> 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))

我试图创建这个数据框架:

代码语言:javascript
复制
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函数,但是如何创建两个不同的变量(foobar)和value (val_fooval_bar)列?melt(df, id.vars="g")只创建一个变量/值对。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-29 22:41:25

我们可以将pivot_longer用于多个列集

代码语言:javascript
复制
library(dplyr)
library(tidyr)
df %>%
   pivot_longer(cols = -g, names_to = c(".value", "grp"), names_sep="_")

或者是来自meltdata.table

代码语言:javascript
复制
library(data.table)
melt(setDT(df), measure = patterns("^foo", "^bar"), 
      value.name = c("val_foo", "val_bar"))

或者base R中提到的@markus

代码语言:javascript
复制
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) 
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59111671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档