2017-02-21 114 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