2016-09-17 3 views
0

私はposted my problemを数ヶ月以来持っており、すべてが大丈夫だと思っています。そして、複数の投稿には申し訳ありません。重み付けデータ - インコヒーレントな結果をもう一度

DF=structure(list(Age = c(16L, 29L, 22L, 64L, 42L, 46L, 30L, 37L, 31L, 52L, 44L, 54L, 23L, 22L, 42L, 39L, 39L, 51L, 25L, 64L, 55L, 56L, 27L, 31L, 39L, 22L, 54L, 33L, 34L, 18L, 39L, 41L, 52L, 41L, 27L, 36L, 64L, 42L, 21L, 44L, 50L, 35L, 22L, 65L, 53L, 18L, 25L, 59L, 56L, 52L, 39L, 40L, 25L, 63L, 43L, 23L, 52L, 48L, 24L, 45L, 27L, 42L, 56L, 43L, 28L, 51L, 54L, 16L, 65L, 56L, 47L, 45L, 29L, 41L, 52L, 50L, 26L, 44L, 35L, 55L, 57L, 43L, 52L, 28L, 33L, 20L, 39L, 15L, 55L, 20L, 30L, 10L, 54L, 51L, 47L, 36L, 42L, 33L, 26L, 29L, 19L, 22L, 22L, 22L, 40L, 33L, 20L, 43L, 53L, 25L, 25L, 49L, 25L, 31L, 45L, 51L, 60L, 54L, 20L, 25L, 60L, 48L, 35L, 42L, 14L, 28L, 55L, 20L, 35L, 17L, 46L, 20L, 45L, 37L, 33L, 36L, 60L, 47L, 27L, 25L, 51L, 32L, 19L, 25L, 19L, 60L, 18L, 17L, 33L, 26L, 33L, 32L, 33L, 22L, 17L, 24L, 43L, 38L, 27L, 40L, 42L, 41L, 31L, 43L, 34L, 33L, 42L, 37L, 24L, 50L, 53L, 35L, 50L, 37L, 46L, 39L, 33L, 56L, 58L, 23L, 31L, 52L, 50L, 33L, 56L, 55L, 20L, 22L, 44L, 50L, 30L, 58L, 59L, 16L, 33L, 53L, 50L, 20L, 31L, 22L, 38L, 59L, 38L, 62L, 52L, 30L, 18L, 53L, 38L, 41L, 44L, 53L, 19L, 53L, 57L), 
    Sous_Categorie = c("7", "7", "7", "7", "7", "7", "7", "7", 
    "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", 
    "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", 
    "7", "7", "7", "7,9", "8", "8", "8", "8", "8", "9", "9", 
    "11", "10,7", "10,8,9", "7", "7", "7", "7", "7", "7,8", "8", 
    "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", "8", 
    "11", "7", "12", "12", "12", "12", "12", "12", "12", "12", 
    "12", "12", "12", "12", "12", "12", "12", "12", "13", "13", 
    "13", "13", "13", "14", "14", "14", "14", "14", "14", "14", 
    "14", "14", "14", "14", "14", "14", "14", "14", "14", "14", 
    "14", "14", "14", "15", "15", "15", "15", "15", "17", "17", 
    "17", "17", "17", "17", "17", "17", "17", "17", "17", "17", 
    "17", "17", "17", "17", "17", "17", "17", "17", "17", "17", 
    "17", "17", "17", "17", "17", "17", "17", "17", "17", "17", 
    "17", "17", "17", "17", "17", "17", "17", "17", "17", "17", 
    "17", "17", "17", "17", "17", "17", "17", "17", "17", "17", 
    "17", "17", "17", "17", "17", "17", "17", "17", "17", "17", 
    "17", "17", "17", "17", "17", "17", "17", "17", "17", "17", 
    "17", "17", "17", "17", "17", "18", "18", "18", "7,12", "7,12", 
    "7,12", "7,12", "7,13,17", "7,16", "7,17", "7,17", "7,17", 
    "7,17", "7,17", "8,17", "8,17", "11,17", "7,17", "7,17", 
    "8,17", "7,17", "7,17", "12,14", "12,15", "17,18")), .Names = c("Age", "Sous_Categorie"), row.names = c(NA, -215L), class = "data.frame") 

そしてここに提案し、受け入れられた解決策:

cat_perc <- function(vec) { 
    # percentages 
    nums <- table(as.numeric(unlist(strsplit(vec, ',')))) 
    perc <- nums/sum(nums) 
    final <- perc * length(vec) 
    return(final) 
} 

    cat_perc(DF$Sous_Categorie) 

は、私は結果をチェックしました、私は何週間以来、このスクリプトを使用して、しかし、私が気づいたことは、重みが偽であると考えられるということですよ:コンビネーションがない場合は1を、コンビネーションでコンビネーション(例:1,3)の場合は1を、それぞれ1,2,3の場合は0.5、それ以外の場合は1/3 1/3、1/3となる。私はマニュアルで7をチェックしましたが、このスクリプトは私が61.9341564を手動で持っていることを示しています:52 * 1 + 0.5 * 17 +(1/3 * 1)= 60.83333、どこに問題がありますか?(thanks?

+0

は、なぜあなたはそれに答え男を聞かないでしょうか? –

+1

@alistaireこの質問をチェックアウトしてください –

+0

このスクリプトは2つのポストを使って構築されているので、他の最もシンプルなソリューションはありますか?私はそれのために申し訳ありません.. – ranell

答えて

0

最後に、私は次のコードてきたのstackoverflowの多くの記事のおかげで:

library(dplyr) 
library(reshape2) 
datas=DF 

cat_perc <- function(vec) { 
# split strings 
L <- lapply(vec,function(v) strsplit(as.character(v),',')) 
# generate all combinations of products 
d <- mapply(expand.grid,L,SIMPLIFY = F,stringsAsFactors=F) 
proportion <- melt(d,id.vars=c('Var1')) %>% # convert to long format 
    group_by(L1) %>% 
    mutate(weight=1/n()) %>%    # calculate weights 
    group_by(Var1) %>%    # 
    summarize(sm=sum(weight))  
proportion=t(proportion) 
colnames(proportion)=proportion[1,] 
proportion=proportion[-1,] 
return(proportion) 
} 

cat_perc(DF$Sous_Categorie) 

を重量はOKのようだまま問題:。。をリシェイプ3つの最後の行はOKではないと私ドン同じフォーマットを取得する方法を知っているinitial_function

これは出力です:

output= structure(c(" 0.8333333", " 2.5000000", "19.0000000", " 5.3333333", 
"20.5000000", " 5.5000000", " 0.5000000", "84.3333333", " 3.5000000", 
"60.8333333", " 9.3333333", " 2.8333333"), .Names = c("10", "11", 
"12", "13", "14", "15", "16", "17", "18", "7", "8", "9")) 

私はinitial_functionの出力としてoutputのフォーマット/クラスが必要:

initial_function=structure(c(61.9341563786008, 10.6172839506173, 3.53909465020576, 
1.76954732510288, 2.65432098765432, 19.4650205761317, 5.30864197530864, 
18.5802469135802, 5.30864197530864, 0.88477366255144, 81.3991769547325, 
3.53909465020576), class = "table", .Dim = 12L, .Dimnames = structure(list(
    c("7", "8", "9", "10", "11", "12", "13", "14", "15", "16", 
    "17", "18")), .Names = "")) 

おかげ

関連する問題