2017-02-21 74 views
-1

我在R裏真的很新,這可能是一個非常基本的問題,但我們假設我有一個數據集,其中有兩列,其中有由男性和女性組成的學生。一列有學生,另一列是性別。我如何找到每個的百分比?我如何找到R中的某些東西的百分比?

+0

嘗試'table'和'prop.table'函數。 –

回答

0

這可能不是最有效的方法,但這是解決問題的一種方法。

首先你必須創建一個data.frame。如何是一個人造的:

學生< - data.frame(學生= C( 「卡拉」, 「喬希」, 「阿曼達」, 「加布裏埃爾」, 「香」, 「蒂凡尼」),性別= C( 「女」, 「男」, 「女」, 「男」, 「女」, 「女」)

視圖(學生)

然後我用道具表,它給了我一個比例表或矩陣中列的比率,並且我將它強制爲一個data.frame,因爲我喜歡data.frames,而且我必須乘以100來從prop表中轉換比率,因爲它們將以百分比形式表示。

指法< - as.data.frame.matrix(prop.table(表(學生))* 100) 指法

我決定把我的數據幀表指法。 所以它說「阿曼達」是女性專欄的16 +(2/3)%。基本上這意味着她是女性,因此男性爲0,而我的數據框架有6名學生,所以(1/6)* 100使她成爲該組的16.667%。

現在有多少比例的女性和男性? 兩種方法:1)用apply函數同時獲取每個集合的數量,或者一次獲取每個集合的數量,我們現在應該使用sum函數。

申請(指法,2,FUN =總和)

女性男性

66.66667 33。33333

試想一下,以百分比形式。

在哪裏2指法是我跨各列施加的總和函數的比例表數據幀(2列或1行)。

所以,如果你只是眼球的數據量小,可以看到有2個/ 6 = 33.3333%的男性在data.frame學生和4/6 = 66.66667%的女性在data.frame所以我正確計算。

另外,

總和(指法$女)

1 66.66667

總和(指法$男)

1 33.33333

而且你可以做一個barplot。當我格式化它時,你必須將它作爲一個矩陣來獲得一個barplot。

,從這裏就可以使性別barplot的層疊的視覺對比。

barplot(as.matrix(古譜),xlab = 「性別」,主要= 「性別在學生的Barplot比較」,ylab = 「學生組的百分比」)

它的堆疊,因爲R給每個學生一盒16.6667%。

說實話它看起來更好,如果你只是繪製應用函數的輸出。當然你可以把它保存到一個變量中。但naahhh ...

barplot(apply(tablature,2,FUN = sum),col = c(「green」,「blue」),xlab =「Gender」,ylab =「學生總數的百分比「,main =」Barplot顯示在學生中代表性別的百分比「,cex.main = 1)

現在它不疊加。

So Here is a visual representation of what I just calculated

+0

'prop.table'具有用於'餘量='到組內計算的比例的參數。例如:'prop.table(table(students),2)'。此外,您在答案中使用「引號」而不是代碼塊 - 您想要的按鈕看起來像「{}' - 或者在每行代碼前面放置4個空格。 – thelatemail

+0

我不知道。一般來說,我相信這不是愚蠢的,但是謝謝你告訴我,有一種方法可以讓正確的答案在一起挖掘更少的功能。 – xyz123

2

您可以使用table()函數生成一個表格,告訴您在學生中有多少男性和女性。然後,將此表格分配給學生總數(可以通過使用長度( )功能)。最後,你只需乘以100

結果您的代碼應該是這樣的:

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 

這些都是像這些操作流行的軟件包,但一樣已經指出,如果你願意,你也可以堅持使用base 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 
相關問題