2017-11-19 3 views
0

これは私の実験用のサンプリングデザインを作成するためのものです。私は2018年の毎週月曜日に8人の個人を調査したいと思います。私が調査した順序は、毎週月曜日にランダムにする必要があります。たとえば。 A、B、C、D ...を1つの月曜日に、次にC、B、A、Dの順で表示します。イベントをカレンダーの日付に割り当てるのはR

これをRで試すには、名前のリストがあります。namelist<- ("A", "B", "C",...)は8種類の名前。私は1年に1度の月曜日にこれらを無作為に割り当てたいと思っています。このために、私は2018年全体の日付のリストを作成しました。X<- ("01-01-2018", "02-01-2018",...)と対応する平日のリストY<- ("Monday", "Tuesday",...)

年内のすべての月曜日に無作為に割り当てられたネームリスト全体が必要です。それについて最善の方法は何ですか?このためにfor-loopを使用できますか?またはこれを行う別の方法がありますか?

あなたがランダムにデータフレームの中に自分の名前のリストからサンプリングする forループで sample()機能を使用することができます

答えて

0

は年にすべての月曜日を取得し、名前リストを作成します。

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 
+0

ありがとうございました。複数列のアプローチが有効です。しかし、シングルカラムアプローチの場合は、次のエラーが発生しています。 '[< - 。factor'( '* tmp *'、iseq、value = "F、D、E、H、G、C、B、A"):無効な因子レベル、NA生成。 – Adwait

+0

ありがとうございます。複数列のアプローチが有効です。しかし、シングルカラムアプローチの場合は、次のエラーが発生しています。 <? - 'factor'(' * tmp * '、iseq、value =" F、D、E、H、G、C、B、A "):無効な因子レベル、NA生成> – Adwait

+0

私は別のネームリストのために毎日同じようなループをしたいので、月曜日を抽出せずにこれを行うことが可能ですか? – Adwait

0
#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="") 
関連する問題