我还在学习R,任务是根据另一个变量将一长串学生分成四组。我将数据作为数据帧加载到R中。如何在不替换的情况下对整行进行示例,从变量的4个级别中各取一行,并将数据输出到电子表格中?
到目前为止,我一直在修改for循环和示例函数,但我很快就忘了这一点。有什么建议吗?这是我想要做的事情的样本。给予:
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组。我希望整行的信息能够转换成一个新的数据帧,其中包含所有的组及其相应的组号。
发布于 2015-01-15 02:09:46
我会用'dplyr‘这个很棒的包裹
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选择所有“区段”。
发布于 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)或者改变学生的名单。
第一种方法,对各节进行排列:
> assigned_section <- print(sample(Section))
[1] 1 4 3 2 2 3 4 1然后,以下数据框架给出了赋值:
assigned_students <- data.frame(First.Name, assigned_section)第二种方法,让学生们安静下来:
> assigned_students <- print(sample(First.Name))
[1] "Data" "Geordi" "Tasha" "William" "Deanna" "Beverly" "Jean-Luc" "Wesley" 然后,以下数据框架给出了赋值:
assigned_students <- data.frame(assigned_students, Section)发布于 2015-01-15 02:15:51
亚历克斯谢谢你。你的答案并不完全是我想要的,但它启发了我正确的答案。我一直从一个过于复杂的角度来思考这个过程。与其让R选择行并将它们放入新的数据框架中,我决定让R为每个学生分配一个随机数,然后按数字对数据帧进行排序:
首先,我将数据框架分成几个部分:
df1<- subset(df, Section ==1)
df2<- subset(df, Section ==2)
df3<- subset(df, Section ==3)
df4<- subset(df, Section ==4)然后我随机生成了一个从1到4的组。
Groupnumber <-sample(1:4,4, replace=F)接下来,我告诉R绑定列:
Assigned1 <- cbind(df1,Groupnumber)*按交替顺序运行组号生成器和cbind,直到我完成整组。(希望确保每个节的编号顺序是唯一的)。
最后,行将数据集重新绑定到一起:
Final_List<-rbind(Assigned1,Assigned2,Assigned3,Assigned4)谢谢大家仔细看过这个。我对数据科学,R和堆栈溢出都是新手,但是随着我学到的更多,我希望回报你的恩惠。
https://stackoverflow.com/questions/27954795
复制相似问题