首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用R,将学生随机分成4组

使用R,将学生随机分成4组
EN

Stack Overflow用户
提问于 2015-01-15 00:09:28
回答 5查看 20.5K关注 0票数 6

我还在学习R,任务是根据另一个变量将一长串学生分成四组。我将数据作为数据帧加载到R中。如何在不替换的情况下对整行进行示例,从变量的4个级别中各取一行,并将数据输出到电子表格中?

到目前为止,我一直在修改for循环和示例函数,但我很快就忘了这一点。有什么建议吗?这是我想要做的事情的样本。给予:

代码语言:javascript
复制
Last.Name <- c("Picard","Troi","Riker","La Forge", "Yar", "Crusher", "Crusher", "Data")
First.Name <- c("Jean-Luc", "Deanna", "William", "Geordi", "Tasha", "Beverly", "Wesley", "Data")
Email <- c("a@a.com","b@b.com", "c@c.com", "d@d.com", "e@e.com", "f@f.com", "g@g.com", "h@h.com")
Section <- c(1,1,2,2,3,3,4,4)

df <- data.frame(Last.Name,First.Name,Email,Section)

我想从每个部分随机选择一个“星际迷航”字符,最终得到两个4组。我希望整行的信息能够转换成一个新的数据帧,其中包含所有的组及其相应的组号。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-01-15 02:09:46

我会用'dplyr‘这个很棒的包裹

代码语言:javascript
复制
require(dplyr)

random_4 <- df %>% group_by(Section) %>% slice(sample(c(1,2),1))

random_4
Source: local data frame [4 x 4]
Groups: Section

  Last.Name First.Name   Email Section
1      Troi     Deanna b@b.com       1
2  La Forge     Geordi d@d.com       2
3   Crusher    Beverly f@f.com       3
4      Data       Data h@h.com       4

random_4
Source: local data frame [4 x 4]
Groups: Section

  Last.Name First.Name   Email Section
1    Picard   Jean-Luc a@a.com       1
2     Riker    William c@c.com       2
3   Crusher    Beverly f@f.com       3
4      Data       Data h@h.com       4

%>%的意思是‘然后’

该守则被解读为:

取DF,然后根据位置(切片)1或2选择所有“区段”。

票数 6
EN

Stack Overflow用户

发布于 2015-01-15 01:42:47

我想你有8个学生:First.Name <- c("Jean-Luc", "Deanna", "William", "Geordi", "Tasha", "Beverly", "Wesley", "Data")

如果你想随机地给这8名学生分配一个节号,并且假设你希望每一节有2名学生,那么你可以选择Section <- c(1, 1, 2, 2, 3, 3, 4, 4)或者改变学生的名单。

第一种方法,对各节进行排列:

代码语言:javascript
复制
> assigned_section <- print(sample(Section))
[1] 1 4 3 2 2 3 4 1

然后,以下数据框架给出了赋值:

代码语言:javascript
复制
assigned_students <- data.frame(First.Name, assigned_section)

第二种方法,让学生们安静下来:

代码语言:javascript
复制
> assigned_students <- print(sample(First.Name))
[1] "Data"     "Geordi"   "Tasha"    "William"  "Deanna"   "Beverly"  "Jean-Luc" "Wesley"  

然后,以下数据框架给出了赋值:

代码语言:javascript
复制
assigned_students <- data.frame(assigned_students, Section)
票数 2
EN

Stack Overflow用户

发布于 2015-01-15 02:15:51

亚历克斯谢谢你。你的答案并不完全是我想要的,但它启发了我正确的答案。我一直从一个过于复杂的角度来思考这个过程。与其让R选择行并将它们放入新的数据框架中,我决定让R为每个学生分配一个随机数,然后按数字对数据帧进行排序:

首先,我将数据框架分成几个部分:

代码语言:javascript
复制
df1<- subset(df, Section ==1)

df2<- subset(df, Section ==2)

df3<- subset(df, Section ==3)

df4<- subset(df, Section ==4)

然后我随机生成了一个从1到4的组。

代码语言:javascript
复制
Groupnumber <-sample(1:4,4, replace=F)

接下来,我告诉R绑定列:

代码语言:javascript
复制
Assigned1 <- cbind(df1,Groupnumber)

*按交替顺序运行组号生成器和cbind,直到我完成整组。(希望确保每个节的编号顺序是唯一的)。

最后,行将数据集重新绑定到一起:

代码语言:javascript
复制
Final_List<-rbind(Assigned1,Assigned2,Assigned3,Assigned4)

谢谢大家仔细看过这个。我对数据科学,R和堆栈溢出都是新手,但是随着我学到的更多,我希望回报你的恩惠。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27954795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档