2016-04-14 3 views
0

私のポストは取得した結果に関するもので、インコヒーレントではないようです。 マイ件のデータです:重み付けデータに関するインコヒーレントな結果

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") 

(再度感謝)with the help of stackoverflow member'sを使用したコード

cats <- unique(unlist(strsplit(DF$Sous_Categorie, ","))) 

cat_perc <- function(cats, vec) { 
    # percentages 
    nums <- sapply(cats, function(cat) sum(grepl(cat, vec))) 
    perc <- nums/sum(nums) 
    final <- perc * length(vec) 
    df <- as.data.frame(as.list(final)) 
    names(df) <- cats 
    return(df) 
} 

a=cat_perc(cats, DF$Sous_Categorie) 
a=(a/sum(a))*100 

私は得られた結果:

7   9  8  11  10  12  13  14 
46.20061 1.215805 4.863222 0.9118541 0.6079027 6.68693 1.823708 6.382979 
    15  17  18  16 
1.823708 27.96353 1.215805 0.3039514 

これらの結果はまったく一貫性のためではありません私は、元のデータDFによると、私は7よりも多くの17を持っていることは明らかです。なぜ私はそのような結果を得るのですか?それはコーディングの問題か統計的な問題ですか?

どうもありがとう

+1

greplは7が7であっても 'TRUE'を返しています。17. table(unlist(strsplit(vec、 '、'))))' – alistaire

+0

のようなものを使ってみてくださいありがとうたくさん !それは悪夢だった。数字の代わりに文字を使用します。しかし、誰かが数字でそれをやる方法を知っているなら、私は興味があります。私はテーブルunlistを試して、私は私のために正しく動作しませんでした。 – ranell

答えて

1

greplは数字よりも、文字列を扱うためのより良いです。この場合、7の一致として17が表示されますが、これは不要です。あなたはより複雑な正規表現を書くことができますが、データを数字で扱う方が簡単です。機能せず、代わりに

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

cat_perc(DF$Sous_Categorie) 
#   7   8   9   10   11   12   13   14 
# 28.8065844 4.9382716 1.6460905 0.8230453 1.2345679 9.0534979 2.4691358 8.6419753 
#  15   16   17   18 
# 2.4691358 0.4115226 37.8600823 1.6460905 

nums <- table(as.numeric(unlist(strsplit(DF$Sous_Categorie, ',')))) 
a <- data.frame(nums/sum(nums) * length(DF$Sous_Categorie)) 
a$Freq <- a$Freq/sum(a$Freq) * 100 
a 
# Var1  Freq 
# 1  7 28.8065844 
# 2  8 4.9382716 
# 3  9 1.6460905 
# 4 10 0.8230453 
# 5 11 1.2345679 
# 6 12 9.0534979 
# 7 13 2.4691358 
# 8 14 8.6419753 
# 9 15 2.4691358 
# 10 16 0.4115226 
# 11 17 37.8600823 
# 12 18 1.6460905 

はあなたが好むどの形式に応じてdata.frameとサブセットを追加またはドロップ

は、いくつかの不要なビットをチョッピング、少しリファクタリング。

+0

http://stackoverflow.com/questions/39550884/weighting-datas-incoherent-result-again –