我是R的新手,这可能是一个非常基本的问题,但是假设我有一个包含2列的数据集,其中包含由男性和女性组成的学生。一栏有学生,另一栏是性别。我如何找到每个的百分比?
答案 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)
现在它没有堆叠。
答案 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