2017-02-21 3 views
-1

私はRで本当に新しいです。これは本当に基本的な質問ですが、私は、2列のデータセットに男性と女性で構成された学生がいるとしましょう。 1つの列には生徒が、もう1つの列には性別があります。それぞれの割合はどのようにして調べるのですか?Rの中で何かのパーセンテージを見つけるには?

+0

は、 'table'と' prop.table'を試してみてください。 –

答えて

0

これはおそらくこれを行う最も効率的な方法ではありませんが、これは問題を解決する1つの方法です。

まず、data.frameを作成する必要があります。どのように人工的なものです:

学生< - data.frame(学生= C( "カーラ"、 "ジョシュ"、 "アマンダ"、 "ガブリエル"、 "シャノン"、 "ティファニー")、性別= C( "女性"、 "男性"、 "女性"、 "男性"、 "女性"、 "女性")

ビュー(学生)

は、その後、私は私の割合を与える小道具テーブルを使用しますテーブルや比率を行列の中で計算し、私はdata.framesが好きなのでdata.frameに変換します.100%を掛けてプロペラテーブルの比率をパーセンテージにする必要があります。

タブ譜< - 私は私のデータフレームテーブルのタブ譜を呼び出すことにしましたas.data.frame.matrix(prop.table(表(学生))* 100) タブ譜

。 「Amanda」は女性列の16 +(2/3)%です。基本的には、彼女が女性で、男性は0なので、私のdata.frameには6人の生徒がいるので、(1/6)* 100は彼女の16.667パーセントになります。

ここで何パーセントの女性と男性がいますか? 2つの方法:1)同時に、apply関数で各セットの数を取得するか、各セットの数を一度に1つずつ取得します。ここでsum関数を使用する必要があります。

適用(タブラチュア、2、FUN =和)

女性男性

66.66667 33。33333

%で表されるとします。

ここで2 tablatureは、合計関数を列全体に適用する割合テーブルのデータフレームです(列の場合は2、行の場合は1)。

少量のデータを目の当たりにすれば、data.frameの学生に2/6 = 33.3333%の男性が、data.frameに4/6 = 66.66667%の女性がいることがわかります計算を正しく行った。

また、

合計(タブ譜$女性)

1 66.66667

合計(タブ譜$男性)

1 33.33333

バープロットを作成できます。私が書式を設定したときに、それを行列として参照してバープロットを取得する必要があります。

ここから、性別バープロットを積み上げて視覚的に比較できます。

barplot(as.matrix(タブ譜)、xlab = "性別"、メイン= "学生の男女のBarplot比較"、ylab = "学生グループの割合")

それは積み重ねだからRは各生徒に16.6667%の箱を作った。

正に言うと、apply関数の出力をプロットするだけの方がいいでしょう。もちろん、変数に保存することもできます。しかしnaahhh ...

barplotは((タブ譜、2、FUN =合計)、COL = C)、( "緑" "青"、xlabは= "性別"、総学生のylab =」割合を適用します"、main ="生徒の中で性別の割合を示す棒グラフ "、cex.main = 1)

今はスタックしません。

So Here is a visual representation of what I just calculated

+0

'prop.table'には、グループ内の比率を計算するための' margin = 'の引数があります。例: 'prop.table(table(students)、2)'。また、コードブロックの代わりにあなたの答えに "引用符"を使用しています。あなたが望むボタンは "{}"のように見えるか、コードの各行の前に4つのスペースを入れてください。 – thelatemail

+0

私はそれを知らなかった。一般的に、私はそれが動作すると愚かではないと信じていますが、正しい答えに到達する方法があることを教えてくれてありがとう。 – xyz123

2

テーブル()関数を使用すると、生徒の中の男性と女性の量を示す表を作成することができます。この表を生徒の総数に分けます(長さ) 関数)。

proportions <- table(your_data_frame$gender_columnn)/length(your_data_frame$gender_column) 
percentages <- proportions*100 
1

data.tableを使用して別の方法:

students <- data.frame(names = c("Bill", "Stacey", "Fred", "Jane", "Sarah"), 
         gender = c("M", "F", "M", "F", "F"), 
         stringsAsFactors = FALSE) 

library(data.table) 
setDT(students)[ , 100 * .N/nrow(students), by = gender ] 

# gender V1 
# 1:  M 40 
# 2:  F 60 

またはdplyr

library(dplyr) 
students %>% 
    group_by(gender) %>% 
    summarise(percent = 100 * n()/nrow(students)) 

# A tibble: 2 × 2 
# gender percent 
# <chr> <dbl> 
# 1  F  60 
# 2  M  40 

最後にあなたは自分のコードのようなものでなければなりません100

で結果を掛けこれらはどちらも、このような操作のための一般的なパッケージですが、既に指摘されている場合は、好きな場合はベースRに固執することもできます。

0

はすでにこの問題にはいくつかの良い答えがありますが、元の提出者は、Rに新しいものを認めているように、私は非常に長い形式の答えを提供したかったです。以下の答えは必要最小限のステップ数以上を要し、パイプのようなヘルパーは使用しません。

この方法で回答を提供すると、元の送信者は各ステップで何が起こっているのかを理解するのに役立ちます。

# Load the dplyr library 
library("dplyr") 

# Create an example data frame 
students <- 
    data.frame(
    names = c("Bill", "Stacey", "Fred", "Jane", "Sarah"), 
    gender = c("M", "F", "M", "F", "F"), 
    stringsAsFactors = FALSE 
) 

# Count the total number of students. 
total_students <- nrow(students) 

# Use dplyr filter to obtain just Female students 
all_female_students <- dplyr::filter(students, gender %in% "F") 

# Count total number of female students 
total_female <- nrow(all_female_students) 

# Repeat to find total number of male students 
all_male_students <- dplyr::filter(students, gender %in% "M") 

total_male <- nrow(all_male_students) 

# Divide total female students by total students 
# and multiply result by 100 to obtain a percentage 
percent_female <- (total_female/total_students) * 100 

# Repeat for males 
percent_male <- (total_male/total_students) * 100 

> percent_female 
[1] 60 
> percent_male 
[1] 40 
関連する問題