2017-05-22 10 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各群において、二つのタイプがあり(1及び2)。それぞれのタイプ1(売り手)には、彼が何をしたか(過充電かどうか)に関する情報はありません。しかし、私たちは過充電かどうかのバイヤー(タイプ2)に関する情報を持っています。

もし私が過度に扱われたバイヤーを特定できれば、これはこのバイヤーがやりとりしている売り手が買い手を過度に扱ったことを意味します。だから私が見なければならないのは、バイヤーと同じグループの売り手のジェンダーです。

マッチするグループ73では、たとえば、期間1で、対象708が過充電されていることがわかります(グループ1のもの)。この男性がグループ1とマッチ73に属していることを知っているので、私は彼に過度の負担をかけている売り手を特定することができます:性別= 1の被験者654

グループ2(一致グループ73)では、期間3でエージェント546が過充電されていたことがわかります。この男性がグループ1とマッチ73に属していることを知っているので、私は彼に過度の負担をかけた売り手を特定することができます:性別= 1の被験者435。 .... 私が持っているすべての観察に対してこれを行うでしょう。

しかし、私は本当にこれは私が実行しようとしましたが、私のニーズに適合しないものですコードに移行する方法を知っていると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.

には適していません。「forループ」を考えると、あなたは、このループを使用して各マッチング買い手を見つけることができます売り手とバイヤーを分離し、それらに加わることによってdata.tableのあなたのための別の解決策。

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)] 
関連する問題