데이터 프레임을 재구성하기 위해 reshape_long
과 reshape_wide
(아래의 전체 작동 예제 참조) 기능을 구현했습니다. 몇 가지 작은 예제를 만들었고 두 함수가 제대로 작동하는 것처럼 보였습니다.dcast와 melt로 데이터 프레임을 변형하십시오.
그러나 reshape_wide
기능 을 실제 데이터 세트 (약 200.000 - 300.000 행)에 사용하면 오류가 발생합니다. 무슨 일이 일어나는지는 X, Y, Z의 모든 값을 1로 설정 한 것입니다. 실제 데이터의 구조는 아래의 작은 예와 똑같습니다. 2 일 동안 작업 한 후에 나는 문제는 "기본 키"(test_name
, group_name
및 id
)가 넓은 형태로만 유일하다는 것입니다. reshape_long
함수를 적용하면 기본 키가 더 이상 고유하지 않습니다. 궁금한데, 아무도 나에게 d1 -> reshape_wide -> d2
의 단계가 d1
의 유일하지 않음 때문에 전혀 작동 할 수 있는지 여부를 말해 줄 수 있습니까?
library(reshape2)
library(taRifx)
reshape_long <- function(data, ids) {
# Bring data into long form
data_long <- melt(data, id.vars = ids,
variable.name="Data_Points", value.name="value")
data_long$value <- as.numeric(data_long$value)
# Remove rows were analyte value is NA
data_long <- data_long[!is.na(data_long$value), ]
# Resort data
formula_sort <- as.formula(paste("~", paste(ids, collapse="+")))
data_long <- sort(data_long, f = formula_sort)
return(data_long)
}
reshape_wide <- function(data, ids) {
# Bring data into wide form
formula_wide <- as.formula(paste(paste(ids, collapse="+"),
"~ Data_Points"))
data_wide <- dcast(data, formula_wide)
# Resort data
formula_sort <- as.formula(paste("~", paste(ids, collapse="+")))
data_wide <- sort(data_wide, f = formula_sort)
return(data_wide)
}
d <- data.frame(
test_name = c(rep("Test_A", 6), rep("Test_B", 6)),
group_name = c(rep("Group_C", 3), rep("Group_D", 3),
rep("Group_C", 3), rep("Group_D", 3)),
id = c("I1", "I2", "I3", "I4", "I5", "I6",
"I1", "I2", "I3", "I7", "I8", "I9"),
X = c(NA,NA,1,2,3,4,5,6,NA,7,8,9),
Y = as.numeric(10:21),
Z = c(NA,22,23,NA,24,NA,25,26,NA,27,28,29)
)
d
d1 <- reshape_long(d, ids=c("test_name", "group_name", "id"))
d1
d2 <- reshape_wide(d1, ids=c("test_name", "group_name", "id"))
d2
identical(d,d2)