Hier ist ein Ansatz mit der reshape2
Bibliothek.
machine1.workingTime <- 1:10
machine2.workingTime <- 21:30
machine1.producedItems <- 101:110
machine2.producedItems <- 201:210
date <- c("2017-01-01","2017-01-02","2017-01-03","2017-01-04","2017-01-05","2017-01-06",
"2017-01-07","2017-01-08","2017-01-09","2017-01-10")
theData <- data.frame(date,
machine1.producedItems,
machine1.workingTime,
machine2.producedItems,
machine2.workingTime
)
library(reshape2)
meltedData <- melt(theData,measure.vars=2:5)
meltedData$variable <- as.character(meltedData$variable)
# now, extract machine numbers and variable names
variableNames <- strsplit(as.character(meltedData$variable),"[.]")
# token after the . is variable name
meltedData$columnName <- unlist(lapply(variableNames,function(x) x[2]))
# since all variables start with word 'machine' we can set chars 8+ as ID
meltedData$machineId <- as.numeric(unlist(lapply(variableNames,function(x) y <- substr(x[1],8,nchar(x[1])))))
theResult <- dcast(meltedData,machineId + date ~ columnName,value.var="value")
head(theResult)
Die Ergebnisse sind:
> head(theResult)
machineId date producedItems workingTime
1 1 2017-01-01 101 1
2 1 2017-01-02 102 2
3 1 2017-01-03 103 3
4 1 2017-01-04 104 4
5 1 2017-01-05 105 5
6 1 2017-01-06 106 6
>
UPDATE (02Dec2017): auf die Kommentare reagieren, wenn es keine andere Kennung mehrere Zeilen für eine Maschine zur eindeutigen Unterscheidung kann man eine Aggregation verwenden Funktion, die zu einer Beobachtung pro Maschine führt.
theResult <- dcast(meltedData,machineId ~ columnName,
fun.aggregate=mean,value.var="value")
head(theResult)
Die Ergebnisse sind wie folgt.
> head(theResult)
machineId producedItems workingTime
1 1 105.5 5.5
2 2 205.5 25.5
>
UPDATE (02Dec2017): auf Kommentare reagieren, eine Lösung, die eine eindeutige laufende Nummer verwendet Zeilen von Daten zu unterscheiden, sieht wie folgt aus.
machine1.workingTime <- 1:10
machine2.workingTime <- 21:30
machine1.producedItems <- 101:110
machine2.producedItems <- 201:210
id <- 1:length(machine1.workingTime)
theData <- data.frame(id,
machine1.producedItems,
machine1.workingTime,
machine2.producedItems,
machine2.workingTime
)
meltedData <- melt(theData,measure.vars=2:5)
head(meltedData)
meltedData$variable <- as.character(meltedData$variable)
# now, extract machine numbers and variable names
variableNames <- strsplit(as.character(meltedData$variable),"[.]")
meltedData$columnName <- unlist(lapply(variableNames,function(x) x[2]))
meltedData$machineId <- as.numeric(unlist(lapply(variableNames,function(x) y <- substr(x[1],8,nchar(x[1])))))
theResult <- dcast(meltedData,machineId + id ~ columnName,value.var="value")
head(theResult)
... und der Ausgang.
Bitte geben Sie ein Codebeispiel an, das Ihren Datenrahmen (oder erfundene Daten ähnlich Ihrem Datenrahmen) enthält und zeigt, wie weit Sie gekommen sind und wo Sie stecken geblieben sind. –
Es ist nicht klar, ob dies Spaltennamen oder Werte in einer Spalte sind. Was ist 'MachineNum'? – akrun
Ich denke, die Schlüsselwörter für Sie sind lange Form im Vergleich zu Wide-Form-Daten und wie man von auf die andere konvertieren. Wenn Sie Beispieldaten angeben, erhalten Sie wahrscheinlich viel bessere Antworten. – snoram