2014-02-18 2 views
1

이 항목은 며칠 동안 나를 괴롭 히고 있습니다. 스택 교환에는 아직 운이 없었습니다. 본질적으로, 나는 두 개의 테이블을 가지고, 하나의 테이블은 두 번째 테이블에서 선택할 열 (열 번호 기준)을 정의합니다. 내 초기 계획은 문자열 함께 컬럼에이고 그것이 행복하지 않다 as.character로 I 즉, 문자열을 정의 할 때 그러나, 부속 명세서에 그 전달 :가변 개수의 특정 열로 데이터 프레임을 부분 집합합니다. R

# Data Sets, Variable_Selection: Table of Columns to Select from Variable_Table 

VARIABLE_SELECTION <- data.frame(Set.1 = c(3,1,1,1,1), Set.2 = c(0,3,2,2,2), Set.3 = c(0,0,3,4,3), 
           Set.4 = c(0,0,0,5,4), Set.5 = c(0,0,0,0,5)) 

VARIABLE_TABLE <- data.frame(Var.1 = runif(100,0,10), Var.2 = runif(100,-100,100), Var.3 = runif(100,0,1), 
          Var.4 = runif(100,-1000,1000), Var.5 = runif(100,-1,1), Var.6 = runif(100,-10,10)) 

# Sting rows into character string of columns to select 

VARIABLE_STRING <- apply(VARIABLE_SELECTION,1,paste,sep = ",",collapse = " ") 
VARIABLE_STRING <- gsub(" ",",",VARIABLE_STRING) 
VARIABLE_STRING <- data.frame(VAR_STRING = gsub(",0","",VARIABLE_STRING)) 

# Will actually be part of lapply function but, one line selection for demonstration: 

VARIABLE_SINGLE_SET <- as.character(VARIABLE_STRING[4,]) 

# Subset table for selected columns 

VARIABLE_TABLE_SUB_SELECT <- VARIABLE_TABLE[,c(VARIABLE_SINGLE_SET)] 

# Error Returned: 
# Error in `[.data.frame`(VARIABLE_TABLE, , c(VARIABLE_SINGLE_SET)) : 
# undefined columns selected 

내가 아는 텍스트 형식은 문제가 있지만 해결 방법이나 제안 사항을 찾을 수 없습니까?

답변

1

당신은 변수 이름으로 열 및 프로세스의 수에 의하여 하위 설정을 피하거나 최소 정수 목록으로 색인 (문자열로 강제 할 필요가 없습니다)

먼저, 같은 생각이 머물 유지해야 코드를 수정하십시오. Basciaclly 저는 변수를 벡터로 강제 변환합니다 :

VARIABLE_TABLE[,as.numeric(unlist(strsplit(
     VARIABLE_SINGLE_SET,',')))] 
+0

큰 !!!! 대단히 고마워, 이런 식으로 생각 했어. 작동합니다, 건배. – user3322865

1

원하는 결과가 나오나요?

lapply(VARIABLE_SELECTION, function(x) VARIABLE_TABLE[ , x[x != 0], drop = FALSE]) 

각 요소의 서브 세트리스트를 생성 'VARIABLE_TABLE'(적은 수의 행을 가진 'VARIABLE_TABLE'를 사용) 'VARIABLE_SELECTION'주어진다.

# $Set.1 
#  Var.3 Var.1 Var.1.1 Var.1.2 Var.1.3 
# 1 0.09536403 5.593292 5.593292 5.593292 5.593292 
# 2 0.09086404 6.339074 6.339074 6.339074 6.339074 
# 
# $Set.2 
#  Var.3 Var.2 Var.2.1 Var.2.2 
# 1 0.09536403 65.81870 65.81870 65.81870 
# 2 0.09086404 66.79157 66.79157 66.79157 
# 
# $Set.3 
#  Var.3  Var.4 Var.3.1 
# 1 0.09536403 -674.6672 0.09536403 
# 2 0.09086404 -576.7986 0.09086404 
# 
# $Set.4 
#  Var.5  Var.4 
# 1 0.5155411 -674.6672 
# 2 -0.9593219 -576.7986 
# 
# $Set.5 
#  Var.5 
# 1 0.5155411 
# 2 -0.9593219 
+0

또한 완벽하게 작동합니다. 이전 답변의 해결책이 제 목적에 더 적합 할 수 있지만 실제로 유용 할 것입니다. 건배 – user3322865

관련 문제