如何在R中找到某些东西的百分比?

时间:2017-02-21 23:09:56

标签: r

我是R的新手,这可能是一个非常基本的问题,但是假设我有一个包含2列的数据集,其中包含由男性和女性组成的学生。一栏有学生,另一栏是性别。我如何找到每个的百分比?

4 个答案:

答案 0 :(得分:2)

您可以使用table()函数生成一个表格,告诉您学生中有多少男性和女性。然后将此表格除以学生总数(您可以通过使用长度()获得此表格功能)。最后你只需将结果乘以100。

您的代码应该是:

ko.observableArray

答案 1 :(得分: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

这些都是这类操作的流行软件包,但正如已经指出的那样,如果您愿意,也可以坚持使用基础R.

答案 2 :(得分:0)

这可能不是最有效的方法,但这是解决问题的一种方法。

首先,您必须创建一个data.frame。如何是人为的:

students <- data.frame(student = c("Carla", "Josh", "Amanda","Gabriel", "Shannon", "Tiffany"), gender = c("Female", "Male", "Female", "Male", "Female", "Female")

View(students) 

然后我使用prop表给出一个比例表或矩阵中列的比率,然后我将它强制转换为data.frame,因为我喜欢data.frames,我必须乘以100来转换比率从支柱表中可以看出它们的百分比。

tablature <- as.data.frame.matrix(prop.table(table(students)) * 100)
tablature 

我决定调用我的数据框表格表。 所以它说&#34; Amanda&#34;雌性色谱柱为16 +(2/3)%。基本上这意味着她是女性,因此男性为0,而我的data.frame有6名学生,所以(1/6)* 100使她成为16.667%。

现在有多少比例的女性和男性? 两种方式:1)使用apply函数同时获取每个集合的数量,或者一次获取每个集合的数量,我们现在应该使用sum函数。

apply(tablature, 2, FUN = sum)

女性男性

66.66667 33.33333

想象一下,就百分比而言。

其中2 tablature是比例表数据框,我将sum函数应用于列中(列为2列,行为1)。

因此,如果您只关注少量数据,您可以看到data.frame学生中有2/6 = 33.3333%的男性,而data.frame中有4/6 = 66.66667%的女性,所以我做了计算正确。

可替换地,

sum(tablature$Female)

[1] 66.66667

sum(tablature$Male)

[1] 33.33333

你可以制作一个条形图。当我格式化它时,你必须将它称为矩阵才能得到一个条形图。

从这里你可以对性别条形图进行叠加的视觉比较。

barplot(as.matrix(tablature), xlab = "Gender", main = "Barplot comparison of Gender Among Students", ylab = "Percentages of Student Group")
由于R让每个学生成为16.6667%的盒子,所以它的堆叠。

说实话,如果您只是绘制apply函数的输出,它看起来会更好。当然你可以将它保存到变量中。但是naahhh ......

barplot(apply(tablature, 2, FUN = sum), col = c("green", "blue"),xlab = "Gender", ylab = "Percentage of Total Students", main = "Barplot showing the Percentages of Gender Represented Among Students", cex.main = 1)

现在它没有堆叠。

So Here is a visual representation of what I just calculated

答案 3 :(得分: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