R:根据复合列名称

时间:2017-11-25 10:09:32

标签: r tidyverse

我有一个数据框,其中包含两组数据(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"))

我想重塑这个数据帧,以便每行只包含一组的观察结果。在这种长格式中,应通过在'_'处分割原始列名来给出set和column名称:

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_split','sub'结合使用,但遗憾的是没有成功。这可以使用退潮函数来完成吗?

1 个答案:

答案 0 :(得分:1)

是的,您可以使用tidyverse执行此操作!

你很近,你需要gather,然后是separate,然后是spread

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

希望这有帮助!