将R中的10个列堆叠为两列

时间:2015-11-24 17:15:48

标签: r reshape data-manipulation

我无法将R中的10列堆叠成每列相关的两列5列。基本上我有类似的东西:

Name1,ID1,Name2,ID2,Name3,ID3,Name4,ID4,Name5,ID5

我需要将它们堆叠到Name和ID表中,其中每个Name列中的值仍然与其ID对应。什么是最好的方法来解决这个问题?

谢谢!

2 个答案:

答案 0 :(得分:4)

我会从" data.table"中推荐melt。封装

这是一些示例数据。 (这是应该分享的东西。)

mydf <- data.frame(
  matrix(1:20, ncol = 10, dimnames = list(NULL, paste0(c("Name", "ID"), 
                                                       rep(1:5, each = 2)))))

mydf
##   Name1 ID1 Name2 ID2 Name3 ID3 Name4 ID4 Name5 ID5
## 1     1   3     5   7     9  11    13  15    17  19
## 2     2   4     6   8    10  12    14  16    18  20

以下是重塑:

library(data.table)
melt(as.data.table(mydf), measure = patterns("Name", "ID"), 
     value.name = c("Name", "ID"))
##     variable Name ID
##  1:        1    1  3
##  2:        1    2  4
##  3:        2    5  7
##  4:        2    6  8
##  5:        3    9 11
##  6:        3   10 12
##  7:        4   13 15
##  8:        4   14 16
##  9:        5   17 19
## 10:        5   18 20

答案 1 :(得分:0)

你可以通过重塑

来做到这一点
library(dplyr)
library(tidyr)
library(rex)

variable_regex =
  rex(capture("Name" %>% 
                or ("ID") ),
      capture(digits) )

mydf %>%
  mutate(row_ID = 1:n()) %>%
  gather(variable, value, -row_ID) %>%
  extract(variable,
           c("new_variable", "column_ID"),
           variable_regex) %>%
  spread(new_variable, value)