R:基于复合列名将数据帧从宽格式重塑为长格式 [英] R: reshape dataframe from wide to long format based on compound column names

查看:0
本文介绍了R:基于复合列名将数据帧从宽格式重塑为长格式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个数据帧,其中包含两组数据(A、B)的观测数据,数据集和观测类型由列名指定:

mydf <- data.frame(meta1=paste0("a",1:2), meta2=paste0("b",1:2), 
                   A_var1 = c(11:12), A_var2 = c("p","r"), 
                   B_var1 = c(21:22), B_var2 = c("x","z"))
我想重塑此数据帧,以便每行只包含一个集合上的观测数据。在这种长格式中,集合和列名应该通过在‘_’处拆分原始列名来给出:

mydf2 <- data.frame(meta1=rep(paste0("a",1:2),2), 
                  meta2=rep(paste0("b",1:2),2),
                  set=c("A","B","A","B"),
                  var1 = c(11:12),
                  var2 = c("a","b","c","d"))

我曾尝试将‘Gather’与‘str_plit’、‘SUB’结合使用,但不幸的是没有成功。是否可以使用潮汐函数来完成此操作?

推荐答案

是,您可以使用tidyverse

您离得很近,您需要gather,然后separate,然后spread

new_df <- mydf %>%
  gather(set, vars, 3:6) %>%
  separate(set, into = c('set', 'var'), sep = "_") %>%
  spread(var, vars)

希望这能有所帮助!

这篇关于R:基于复合列名将数据帧从宽格式重塑为长格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆