需要重塑一个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)
以下重现您的预期输出:
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)