我有一个很长的表,其中包含我想要从计算机SC中检索 size = 30 学生样本的学生。之后,根据sample()
生成的给定值,我想计算全日制学生的数量。
备注:我是R的新用户,也许有我不知道的功能。
表:
id statut field name
1 full time Mecanic John Mark
2 full time Chimestry Marie Li
3 Part time Computer SC Charle MacRay
.. ... ... ...
第1步:表仅包含计算机SC学生
tableTemp <- table[ which(table$field=='Computer SC']
Step2:大小为30的样本
sample_length <- 30
v_samp_csc <- sample(nrow(tableTemp ), sample_length , replace = FALSE, prob = NULL)
所以v_samp_csc
包含30个学生ID(全职和兼职)。
> v_samp_csc
> 1 5 20 3 4 8 16 5 81 2 65 ...
问题:如何从这些ID中检查相应的学生行是否在计算机SC中全职并计算在内。
例如:
3 -> Part time Computer SC Charle MacRay
58 -> Full time Computer SC Marie Luise
16 -> Full time Computer SC Mark moore
就这样,我算上那些全职的人。
答案 0 :(得分:1)
如果它是一个非常大的表,您可能更喜欢存储您的采样data.frame,然后对该对象执行计数:
sampleTable <- tableTemp[v_samp_csc,]
sampleFullTime <- sampleTable[sampleTable$statut=='full time',]
由于帖子标题是关于id的访问,你可能也会这样做:
FullTimeIds <- which(tableTemp$statut=='full time')
tableTemp[intersect(FullTimeIds, v_samp_csc),]
答案 1 :(得分:1)
好的说明我刚刚创建了自己的数据集以匹配你拥有的数据集。
tableTemp <- data.frame(id = 1:100,
statut = rep(c("full time", "part time"), 50),
field = rep("CS", 100),
name = paste(1:100))
sample_length <- 30
v_samp_csc <- sample(nrow(tableTemp ), sample_length , replace = FALSE, prob = NULL)
v_samp_csc
> 57 20 82 34 9 77 13 96 47 59 19 86 30 31 6 40 1 5 66 75 87 53 44 45 3 17 67 28 52 2
首先,我们尝试找到与v_samp_csc中的ID匹配的学生的索引。假设所有ID都不同,将使用以下代码完成此操作:
tableTemp$id %in% v_samp_csc
> [1] TRUE TRUE TRUE FALSE TRUE TRUE FALSE FALSE TRUE
> [10] FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE
> [19] TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> ....
使用此向量,我们可以选择真实的行,即采样的学生。 sampStudents&lt; - tableTemp [tableTemp $ id%in%v_samp_csc,]
现在您可以计算新数据集中有多少是全职。我注意到你的代码中有些地方说过&#34;全职和#34;它说的其他地方&#34;全职&#34;。当然应该注意这一点,但是现在我建议使用表来检查每个
的数量table(sampStudents$statut)
> full time part time
> 17 13
如果你只有一种&#34;全职时间&#34;你可以像往常一样计算它们
sum(sampStudents$statut == "full time")
> [1] 17
替代方法
如果你想加快你的第2步和第3步(这里是3使用你的样本来创建一个新的数据集)你可以使用dplyr包,它有一个名为sample_n的函数,它对n行进行采样,给出了相同的结果。
library(dplyr)
sampStudents <- sample_n(tableTemp, 30)
答案 2 :(得分:1)
这给出了从随机选择的30名计算机SC学生样本中全日制学生人数
library(dplyr)
table %>%
filter(field == 'Computer SC') %>%
n_sample(30) %>%
filter(status == 'Full Type') %>%
summarise(count = n())
比它可能稍微冗长但是如果你想要进入dplyr那并不是一件坏事!你可以把它缩短为:
library(dplyr)
table %>%
filter(field == 'Computer SC') %>%
n_sample(30) %>%
summarise(count = sum(status == 'Full Time))