2017-05-22 1 views
0

데이터를 분석하고 싶습니다.프로그래밍을 사용하여 쌍으로 정보 유추

내 데이터베이스는 1408 (유형 1의 경우 704, 유형 2의 경우 704) 관측치 및 49 개의 변수로 구성됩니다. 여기 내 데이터베이스의 일부입니다.

요점은 내가 과급 한 유형 1 (판매자)의 성별을 분석하고자한다는 것입니다. 그룹화 = 73 매칭 살펴 경우

Data 
Subject ID Gender Period Matching group Group Type Overcharging 
    654  1   1   73   1  1  NA 
    654  1   2   73   1  1  NA 
    654  1   3   73   1  1  NA 
    654  1   4   73   1  1  NA 
    708  0   1   73   1  2  1 
    708  0   2   73   1  2  0 
    708  0   3   73   1  2  0 
    708  0   4   73   1  2  1 
    435  1   1   73   2  1  NA 
    435  1   2   73   2  1  NA 
    435  1   3   73   2  1  NA 
    435  1   4   73   2  1  NA  
    546  0   1   73   2  2  0 
    546  0   2   73   2  2  0 
    546  0   3   73   2  2  1 
    546  0   4   73   2  2  0 

는 예를 들어, 2 기 (1, 2)이있다 .And 각 그룹의 2 종류가있다 (1, 2). 각 유형 1 (판매자)에 대해 우리는 그가 한 일에 대한 정보를 가지고 있지 않습니다 (과급 여부). 그러나 과대 선전 된 바이어 (유형 2)에 대한 정보가 있습니다.

내가 과다 취급 된 구매자를 식별 할 수 있으면이 구매자가 상호 작용하는 판매자가 구매자를 과다하게 취급했다는 의미입니다. 그래서 내가 볼 필요가있는 것은 구매자와 같은 그룹에있는 판매자의 성별입니다.

일치 그룹 73에서 우리는 기간 1에서 대상 708이 과다 청구되었다는 것을 알고 있습니다 (그룹 1에있는 것). 이 남자들이 1 그룹과 73 그룹에 속해 있음을 알았 기 때문에 나는 그를 과다 청구 한 판매자를 식별 할 수 있습니다 : 성별 = 654 인 654 세.

그룹 2 (일치하는 그룹 73)에서 우리는 기간 3에서 에이전트 546이 과다 청구되었음을 알 수 있습니다. 이 남자들이 그룹 1과 일치 그룹 73에 속한다는 것을 알았 기 때문에 나는 그를 과다 청구 한 판매자를 식별 할 수 있습니다 : 435 = 성별 = 1. .... 내가 가진 모든 관찰에 대해 이렇게 할 것입니다.

하지만 난 정말이 내가하려고 노력하지만, 내 요구에 맞지 않는 것입니다 코드로 진행하는 방법을 알고 R.

에이 조건을 만들지 마라!

for (matchinggroup[type==1]==matchinggroup[type==2] & 
group[type==1]==group[type==2] & period[type==1]==period[type==2]) 
    { 
    if ((overtreatment==1), na.rm=TRUE) 
sum(gender==1[type==1], na.rm=TRUE) 
    } 

내가하고 싶은 예상 출력은 다음과 같습니다

sum(overcharging==1[gender==1&type==1]) 
    >3 
    sum(overcharging==1[gender==0&type==1]) 
    >0 
    sum(overcharging==0[gender==1&type==1]) 
    >5 
    sum(overcharging==0[gender==0&type==1]) 
    >0 

당신의 시간과 배려에 감사드립니다! 도움을 주시면 감사하겠습니다. 원하는 출력이 무엇인지

답변

0

정확하게 확실하지,하지만이 사항을 고려하십시오

Data <- read.table(header = T, 
        text = "Subject_ID Gender Period Matching_group Group Type Overcharging 
654  1   1   73   1  1  NA 
654  1   2   73   1  1  NA 
654  1   3   73   1  1  NA 
654  1   4   73   1  1  NA 
708  0   1   73   1  2  1 
708  0   2   73   1  2  0 
708  0   3   73   1  2  0 
708  0   4   73   1  2  1 
435  1   1   73   2  1  NA 
435  1   2   73   2  1  NA 
435  1   3   73   2  1  NA 
435  1   4   73   2  1  NA  
546  0   1   73   2  2  0 
546  0   2   73   2  2  0 
546  0   3   73   2  2  1 
546  0   4   73   2  2  0 
") 

dat1 <- subset(Data, Overcharging==1) 

이 모든 과충전 판매자를 찾을 수 있습니다.

out <- data.frame() 

for(i in 1:nrow(dat1)){ 
    dat2 <- dat1[i,] 
    df <- Data[Data$Period==dat2$Period & Data$Matching_group==dat2$Matching_group & 
    Data$Group==dat2$Group & Data$Type==1,] 
    out <- rbind(out, df) 
} 

당신에게 줄 것이다 :

Subject_ID Gender Period Matching_group Group Type Overcharging 
1   654  1  1    73  1 1   NA 
4   654  1  4    73  1 1   NA 
11  435  1  3    73  2 1   NA 
+0

완벽하게 맞습니다! 고맙습니다. – Marc

0

내가 솔루션은 내가 개발

R.

에 적합하지 않다 "루프"생각 그리고 당신은이 루프를 사용하여 각 일치하는 구매자를 찾을 수 판매자와 구매자를 분리하여 데이터 테이블을 가진 또 다른 솔루션입니다.

library(data.table) 
Data <- data.table(read.table(header = T, 
        text = "Subject_ID Gender Period Matching_group Group Type Overcharging 
        654  1   1   73   1  1  NA 
        654  1   2   73   1  1  NA 
        654  1   3   73   1  1  NA 
        654  1   4   73   1  1  NA 
        708  0   1   73   1  2  1 
        708  0   2   73   1  2  0 
        708  0   3   73   1  2  0 
        708  0   4   73   1  2  1 
        435  1   1   73   2  1  NA 
        435  1   2   73   2  1  NA 
        435  1   3   73   2  1  NA 
        435  1   4   73   2  1  NA  
        546  0   1   73   2  2  0 
        546  0   2   73   2  2  0 
        546  0   3   73   2  2  1 
        546  0   4   73   2  2  0 
        ") 
) 

Data[, SubjectType := ifelse(Type==1, "Seller", "Buyer")] 
Subjects <- unique(Data[, .(Subject_ID, Gender)]) 
Matches <- dcast(Data, Matching_group+Group~SubjectType, value.var="Subject_ID", fun.aggregate = mean) 

Buys <- Data[!is.na(Overcharging), .(Buyer = Subject_ID, BuyerGender = Gender, Period, Matching_group, Group, Overcharging)] 
Buys <- merge(Buys, Matches, by=c("Buyer", "Matching_group", "Group"), all.x = T) 
Buys <- merge(Buys, Subjects[, .(Seller = Subject_ID, SellerGender = Gender)], by="Seller", all.x = T) 

Buys[Overcharging==0, .N, .(BuyerGender, SellerGender)] 
Buys[Overcharging==1, .N, .(BuyerGender, SellerGender)] 
관련 문제