如何重塑数据(使用列名称解析)

eAn*_*ndy 0 r reshape

需要重塑一个data.frame

  TestID Machine1Measure Machine1Count Machine2Measure Machine2Count
1  10006              11            14              16            24
2  10007              23            27              32            35
Run Code Online (Sandbox Code Playgroud)

对此:

  TestID Machine Measure Count
1  10006       1      11    14
2  10006       2      16    24
3  10007       1      23    27
4  10007       2      32    35
Run Code Online (Sandbox Code Playgroud)

下面是创建每个的代码.看着R中的重塑,但无法弄清楚如何拆分名称

注意:这是列的子集 - 有70-140台机器.我怎样才能使这更简单?

b <-data.frame(10006:10007, matrix(c(11,23,14,27,16,32,24,35),2,4)) 
colnames(b) <- c("TestID", "Machine1Measure", "Machine1Count", "Machine2Measure", "Machine2Count") 

a<-data.frame(matrix(c(10006,10006,10007,10007,1,2,1,2,11,16,23,32,14,24,27,35),4,4)) 
colnames(a) <- c("TestID", "Machine", "Measure", "Count") 

b
a
Run Code Online (Sandbox Code Playgroud)

Mau*_*ers 5

以下重现您的预期输出:

df %>%
    gather(key, value, -TestID) %>%
    separate(key, into = c("tmp", "what"), sep = "(?<=\\d)") %>%
    separate(tmp, into = c("tmp", "Machine"), sep = "(?=\\d+)") %>%
    spread(what, value) %>%
    select(-tmp)
#  TestID Machine Count Measure
#1  10006       1    14      11
#2  10006       2    24      16
#3  10007       1    27      23
#4  10007       2    35      32
Run Code Online (Sandbox Code Playgroud)

说明:我们将数据从宽到长separate整形,并使用两个调用来分隔各种值和ID,然后再从长到重新整形.(我们使用积极的前瞻和积极的后视将键分隔成必需的字段.)


样本数据

df <- read.table(text =
    "  TestID Machine1Measure Machine1Count Machine2Measure Machine2Count
1  10006              11            14              16            24
2  10007              23            27              32            35", header = T)
Run Code Online (Sandbox Code Playgroud)