2016-07-22 3 views
0

동적 열 클래스를 기반으로 데이터 하위 집합에 대한 질문이 있습니다. 예 :동적 열의 데이터 집합 서브 세트

#Coming from other source. Dont exaclty know about their names and number of classes. 
#But following are two demography, which will help in imagining the problem 
gender <- c(1,2) 
agegroup <- c(1,2,3,4,5,6,7,8) 
#moredemo................. 

# reproducible data 
set.seed(1) 
col1 <- as.data.frame(rep(gender, 100)) 
col2 <- as.data.frame(rep(agegroup, 25)) 
col3 <- runif(200) 
datafile <- cbind(col1, col2, col3) 
names(datafile)[1] = "gender" 
names(datafile)[2] = "agegroup" 
datafile <- as.data.frame(datafile) 

#Subset is only for gender = 1 and agegroup = 3 
#Subset is for every combination of classes in each demography 
#No hardcoded name is required, because demography name will not be know 
dat_gender_1_agegroup_3 <- datafile[datafile$gender == 1 & datafile$agegroup == 3, ] 

그러나 성별 및 연령대가 아닌 인구 통계가 더 많을 수 있습니다. 소득이나 교육 또는 인종 등이있을 수 있습니다. 각 인구 통계학에는 다양한 수업이 있습니다. 다양한 수의 열에 데이터 집합 데이터 파일의 하위 집합을 가져 오는 것을 도와주세요. 콤보에 대한 그리드를 확장하여 사용

+0

[MCVE] –

답변

1

후 적용 미리 감사는 하위 집합 :

#dummy data 
set.seed(123) 
mydata <- data.frame(gender = sample(1:2, 100, replace = TRUE), 
        agegroup = sample(1:10, 100, replace = TRUE)) 

#groups 
gender <- c(1,2) 
agegroup <- c(1,2,3,4,5,6,7,8) 

#get all combo 
myCombo <- expand.grid(gender, agegroup) 

#result is a list object 
apply(myCombo, 1, function(i){ 
    mydata[ mydata$gender == i[1] & 
      mydata$agegroup == i[2], ] 
    }) 

편집 : 갱신을 바탕으로, 나는 당신이 단지 분할 명령

split(datafile, datafile[, 1:2]) 
+0

답장을 보내 주셔서 감사합니다. 그러나 성별과 연령대를 하드 코딩하는 것은 그 목적을 달성하지 못할 것입니다. 2 개 이상의 인구 통계가있을 수 있고 그들의 이름은 모를 수도 있기 때문입니다. 감사합니다 – skj

+0

@skj'split()'을 사용해야 할 것 같아요. – zx8754

+1

답변에 감사드립니다. 정말 고맙습니다. 하지만 나는 그들을 구할 수 없다고 믿는다. 나는 노력했지만 표시 목적으로 만 사용되었습니다. 이러한 파일을 저장할 수있는 방법이 있습니까? 그렇다면이 파일을 프로세스에서 더 이상 재사용 할 수 있습니까? – skj

0

무엇에 대한 필요하다고 생각 (가정 열 이름은 "성별"과 "연령대"입니다.) :

gender <- c(1,2) 
agegroup <- c(1,2,3,4,5,6,7,8) 

data_subset <- subset(full_data, gender%in%gender | agegroup%in%agegroup | [AND SO ON]) 

% [values]에 원하는만큼 [column_name] %를 추가 할 수 있습니다.

조금 더!

EDIT : | 대신 분명히 &을 사용할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 인구 구조 나 이름이 알려지지 않은보다 일반적인 솔루션이 필요합니다. 데이터는 각 인구 통계 클래스별로 하위 집합으로 표시됩니다. 예를 들어, demo1 = c (1,2), demo2 = c (1,2,3,4), demo = c (6,7,8). 데이터는 2 * 4 * 3 = 24의 총 조합에 대해 개별적으로 부분 집합됩니다. – skj

관련 문제