böyle data.frame having: daha fazla genel olarakR kısmi data.frame çoğaltma
h d m v1 v2 v3 v4
0 4 0 0.8556 0.8556 0.8554 0.8556
0 4 0 0.8568 0.8568 0.8566 0.8568
1 4 0 0.8602 0.8602 0.8602 0.8602
1 4 0 0.8568 0.8568 0.8528 0.8530
2 4 0 0.8566 0.8568 0.8566 0.8568
bu temsil edilebilir aşağıdaki gibi - olan parametre recordsPerRow (örneğin eşittir) çıkışı olacaktır:
h1 d1 m1 v11 v12 v13 v14 v21 v22 v23 v24 v31 v32 v33 v34
h2 d2 m2 v21 v22 v23 v24 v31 v32 v33 v34 v41 v42 v43 v44
h3 d3 m3 v31 v32 v33 v34 v41 v42 v43 v44 v51 v52 v53 v54
0 o ve ben buna recordsPerRow satırları + sonraki
i < sadece V_ değerleri ekleyen olarak Yani i satır tooks.
işi yapan bir işlevi yarattı ama döngüler için dayanıyor iken (yaklaşık 300000 kayıtları ile data.frame birkaç dakika sürer) oldukça yavaş:rows <- nrow(data)
cols <- ncol(data)
rowLength <- 3 + 4 * recordsPerRow
resultedRows <- rows - recordsPerRow + 1
resultLength <- resultedRows
result <- numeric(resultedRows * rowLength)
for (i in 1:resultLength) {
for(j in 1:recordsPerRow) {
if (j == 1) {
startIndex <- 1 + (i - 1) * rowLength
endIndex <- startIndex + 7 - 1 # + 7 -> row length; - 1 -> end is inclusive
result[startIndex:endIndex] <- as.numeric(data[i + j - 1,2:cols])
} else {
startIndex <- lastIndex
endIndex <- startIndex + 4 - 1 # + 4 -> row length; - 1 -> end is inclusive
result[startIndex:endIndex] <- as.numeric(data[i + j - 1,5:cols])
}
lastIndex <- endIndex + 1
}
}
result <- as.data.frame(matrix(result, ncol = rowLength, byrow = T))
Ben daha verimli bir çözüm olup olmadığını merak ?
ilk 3 sütun son iki sıra dışarıda bırakarak arkasındaki mantık nedir? – mtoto
@mtoto Sorunuzu doğru bir şekilde anlarsam, son iki satır data.frame'in sonu olduğunu varsayarak atlandı. 4. çıktı satırını oluşturmak için yeterli satır yok, çünkü 'h4 d4 m4 v41 v42 ... v61 v62 v63 v64' gibi görünmeli ve şimdi v61 v62 gibi değerlerle satır nr 6 var. Böylece çıktı data.frame uzunluğu * giriş data.frame uzunluğu olacaktır - recordsPerRow + 1 * – f1ames