按ID键到表行

时间:2016-12-09 08:04:34

标签: r

我有一个很长的表,其中包含我想要从计算机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

就这样,我算上那些全职的人。

3 个答案:

答案 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))