将事件分配给 R 中的日历日期
Assigning events to calender dates in R
这是为了为我的实验创建抽样设计。我想在 2018 年的每个星期一调查 8 个不同的人。每个星期一我调查他们的顺序需要是随机的。例如。 A,B,C,D... 一个星期一然后是下一个 C,B,A,D....
为了用 R 尝试这个,我有一个名字列表:namelist<- ("A", "B", "C",...)
包含 8 个不同的名字。我想以随机顺序将这些分配给一年中的每个星期一。为此,我创建了 2018 年全年的日期列表。X<- ("01-01-2018", "02-01-2018",...)
和相应的工作日列表 Y<- ("Monday", "Tuesday",...)
。
我需要一年中所有星期一的随机顺序分配的整个名单。最好的方法是什么?我可以为此使用for循环吗?还是有另一种方法可以做到这一点?
您可以在 for
循环中使用 sample()
函数从您的姓名列表中随机抽样到数据帧中:
获取一年中的所有星期一并创建名单:
dates = as.Date("2018-01-01") +7*(0:52)
namelist = c("A","B","C","D","E","F","G","H")
您没有指定输出的外观,但这里有两个选择:
多列方法:
samples=matrix(0,length(dates),length(namelist))
for(i in 1:length(dates)){samples[i,]=sample(namelist)}
df=data.frame(dates,samples)
> head(df)
dates X1 X2 X3 X4 X5 X6 X7 X8
1 2018-01-01 E G B D H C A F
2 2018-01-08 F D B C G H A E
3 2018-01-15 A E H D B C G F
4 2018-01-22 E C F H A D G B
5 2018-01-29 C E F B G H A D
6 2018-02-05 C G A H D F B E
单列方法:
df2 = data.frame(dates, samples_char="")
for(i in 1:nrow(df2)){df2[i,'samples_char']=paste0(sample(namelist),collapse=", ")}
> head(df2)
dates samples_char
1 2018-01-01 E, A, G, D, C, B, F, H
2 2018-01-08 B, E, F, A, C, H, G, D
3 2018-01-15 H, D, E, C, F, A, G, B
4 2018-01-22 G, F, A, D, E, H, C, B
5 2018-01-29 A, E, D, H, G, C, B, F
6 2018-02-05 C, H, G, F, E, B, D, A
#I have figured this out. Thank you#
##Create calender and list of names for Group01, empty variable for random order and make a dataframe##
Startdate<- as.Date("2017-12-4")
Date<-Startdate + 0:365
Day<-weekdays(FullCalendar)
MONTHS<-months(FullCalendar)
Focal_Order<-""
Group<- ""
Focal_Calender<-data.frame(Date, Day, Group, Focal_Order , stringsAsFactors
= FALSE)
head(Focal_Calender)
Group01<- c("A", "B", "C", "D", "E", "F", "G", "H")
## Use For loop to assign random order to every Monday ##
for(i in 1:nrow(Focal_Calender) ){
if(Focal_Calender[i,2]=='Monday'){
Focal_Calender[i,'Focal_Order']=paste0(sample(Group01),collapse=", ")
Focal_Calender[i,'Group']=paste0("Group 01")}
else {}
}
head(Focal_Calender)
Focal_Calender
write.csv(Focal_Calender, file = "Focal_Calender.csv",row.names=FALSE,
na="")
这是为了为我的实验创建抽样设计。我想在 2018 年的每个星期一调查 8 个不同的人。每个星期一我调查他们的顺序需要是随机的。例如。 A,B,C,D... 一个星期一然后是下一个 C,B,A,D....
为了用 R 尝试这个,我有一个名字列表:namelist<- ("A", "B", "C",...)
包含 8 个不同的名字。我想以随机顺序将这些分配给一年中的每个星期一。为此,我创建了 2018 年全年的日期列表。X<- ("01-01-2018", "02-01-2018",...)
和相应的工作日列表 Y<- ("Monday", "Tuesday",...)
。
我需要一年中所有星期一的随机顺序分配的整个名单。最好的方法是什么?我可以为此使用for循环吗?还是有另一种方法可以做到这一点?
您可以在 for
循环中使用 sample()
函数从您的姓名列表中随机抽样到数据帧中:
获取一年中的所有星期一并创建名单:
dates = as.Date("2018-01-01") +7*(0:52)
namelist = c("A","B","C","D","E","F","G","H")
您没有指定输出的外观,但这里有两个选择:
多列方法:
samples=matrix(0,length(dates),length(namelist))
for(i in 1:length(dates)){samples[i,]=sample(namelist)}
df=data.frame(dates,samples)
> head(df)
dates X1 X2 X3 X4 X5 X6 X7 X8
1 2018-01-01 E G B D H C A F
2 2018-01-08 F D B C G H A E
3 2018-01-15 A E H D B C G F
4 2018-01-22 E C F H A D G B
5 2018-01-29 C E F B G H A D
6 2018-02-05 C G A H D F B E
单列方法:
df2 = data.frame(dates, samples_char="")
for(i in 1:nrow(df2)){df2[i,'samples_char']=paste0(sample(namelist),collapse=", ")}
> head(df2)
dates samples_char
1 2018-01-01 E, A, G, D, C, B, F, H
2 2018-01-08 B, E, F, A, C, H, G, D
3 2018-01-15 H, D, E, C, F, A, G, B
4 2018-01-22 G, F, A, D, E, H, C, B
5 2018-01-29 A, E, D, H, G, C, B, F
6 2018-02-05 C, H, G, F, E, B, D, A
#I have figured this out. Thank you#
##Create calender and list of names for Group01, empty variable for random order and make a dataframe##
Startdate<- as.Date("2017-12-4")
Date<-Startdate + 0:365
Day<-weekdays(FullCalendar)
MONTHS<-months(FullCalendar)
Focal_Order<-""
Group<- ""
Focal_Calender<-data.frame(Date, Day, Group, Focal_Order , stringsAsFactors
= FALSE)
head(Focal_Calender)
Group01<- c("A", "B", "C", "D", "E", "F", "G", "H")
## Use For loop to assign random order to every Monday ##
for(i in 1:nrow(Focal_Calender) ){
if(Focal_Calender[i,2]=='Monday'){
Focal_Calender[i,'Focal_Order']=paste0(sample(Group01),collapse=", ")
Focal_Calender[i,'Group']=paste0("Group 01")}
else {}
}
head(Focal_Calender)
Focal_Calender
write.csv(Focal_Calender, file = "Focal_Calender.csv",row.names=FALSE,
na="")