저는 패널 데이터 (일정 기간 동안의 개별 관측치)가있는 2 차원 data.frame을가집니다. 차원, 개체, 값과 같은 데이터가 포함 된 3 차원 배열을 만든 경우이 방법이 더 유용 할 것이라고 생각합니다.2x2 데이터 프레임에서 [R]로 인덱싱 된 다차원 배열 만들기
내 접근 방식은 기존 2x2 데이터 프레임 내에서 특정 날짜를 분리 한 다음 3 차원 배열을 얻기 위해 이들 슬라이스를 서로 쌓아 올리는 것입니다. 그러나 각 슬라이스에는 다른 수의 행이 있으므로 'abind'기능을 통해 스택을 허용하지 않습니다.
# create example data frame
df1 = cbind(rep(8,12),c(rep(4,4),rep(3,4),2,2,1,1),
rep(2010,12),c("John","Frank","Bill","Anne","John",
"Frank","Bill","Anne","John","Frank","John","Frank"),
1:12,90:79,41:52)
df1 = data.frame(df1)
names(df1) = c("MM","DD","YR","Individual","Value1","Value2","Value3")
# the 'cube' function isolates a specific MM/DD/YR 'slice'
# Later I will attempt to stack the slices to get a 3-d array.
cube = function(MM,DD,YR) {
df2 = df1[df1$MM == MM & df1$DD == DD & df1$YR == YR,]
df2
}
# specify some parameter values
m = 8
d = c(1:4)
y = 2010
# apply 'cube' function to all date combinations specified
# by parameters m, d, y
out = apply(expand.grid(m,d,y),1,
function(x,y,z) cube(x[1],x[2],x[3]))
out = array(out)
k = dim(expand.grid(m,d,y))
z = data.frame(out[1])
require(abind)
# specify function that will transform 2-d data.frame into 3-d array.
for (i in 2:k[1]){
p = data.frame(out[i])
z = abind(z,p,along = 3)
}
내가 루프가 실행할 때 내가 오류 메시지 :
Error in abind(z, p, along = 3) :
arg 'X2' has dims=4, 7, 1; but need dims=2, 7, X
나는 CRAN 패키지를 사용하고는 'abind'.
질문 : 크기가 다른 슬라이스를 서로 쌓아 올리는 'abind'기능을 사용할 수 있습니까? 또는 원하는 배열을 만드는보다 효율적인 방법이 있습니까?
을 나는 100 % 확실하지 않다 무엇을 당신은 "2x2 data.frame"을 의미합니다. 순진하게 2 행 2 열 (이 말은 당신이 의미하는 것일 수는 없다고 생각합니다.)이라고 읽습니다. 작은 재현 가능한 예제를 제공 할 수 있다면 정말 도움이 될 것입니다. –
확인; 이 코드에는 재현 가능한 예제가 포함되어 있습니다. –
새로운 답변이 원하는대로 할 수 있습니까? –