我有兩個數據集在R(以下這些表只是更小的版本),我想合併成一個新的數據框。嵌套循環輸出到data.frame
> meetingtime2
#two columns of datetime that class=factor
ST ET
1 2014-12-22 07:00:00 2014-12-22 07:30:00
2 2014-12-22 07:30:00 2014-12-22 08:00:00
3 2014-12-22 08:00:00 2014-12-22 08:30:00
4 2014-12-22 08:30:00 2014-12-22 09:00:00
5 2014-12-22 09:00:00 2014-12-22 09:30:00
> roomdata2
#three columns; Room=factor, Capacity=integer, Video Conference=numeric
Room Capacity Video.Conference
1 0M02A 16 1
2 0M03A 8 0
3 0M03B 12 1
期望的輸出將是15行5列矩陣。簡而言之,輸出是每個房間的每個時間段。
#the following is a MANUALLY created output of what the first few rows should look like
Room Capacity Video.Conference ST ET
1 0M02A 16 1 2014-12-22 07:00:00 2014-12-22 07:30:00
2 0M02A 16 1 2014-12-22 07:30:00 2014-12-22 08:00:00
3 0M02A 16 1 2014-12-22 08:00:00 2014-12-22 08:30:00
4 0M02A 16 1 2014-12-22 08:30:00 2014-12-22 09:00:00
5 0M02A 16 1 2014-12-22 09:00:00 2014-12-22 09:30:00
6 0M03A 16 1 2014-12-22 07:00:00 2014-12-22 07:30:00
7 0M03A 16 1 2014-12-22 07:30:00 2014-12-22 08:00:00
#and so forth to 15 rows.
我使用嵌套循環
#note, the code is written so I can apply to a bigger (1000's of rows) dataset
>mylist<-list()
>for(i in 1:(nrow(roomdata2)))
+{ for(j in 1:(nrow(meetingtime2)))
+mylist[[j]]<- data.frame(roomdata2[i,1],roomdata2[i,2],roomdata2[i,3],
+meetingtime2[j,1],meetingtime2[j,2])
}
>df<-do.call("rbind",mylist)
>df
輸出我得到嘗試。我讓所有的時隙的最後一個房間,只是沒有前面的房間
roomdata2.i..1. roomdata2.i..2. roomdata2.i..3. meetingtime2.j..1. meetingtime2.j..2.
1 0M03B 12 1 2014-12-22 07:00:00 2014-12-22 07:30:00
2 0M03B 12 1 2014-12-22 07:30:00 2014-12-22 08:00:00
3 0M03B 12 1 2014-12-22 08:00:00 2014-12-22 08:30:00
4 0M03B 12 1 2014-12-22 08:30:00 2014-12-22 09:00:00
5 0M03B 12 1 2014-12-22 09:00:00 2014-12-22 09:30:00
我知道我的代碼是遠離正確的,是給我循環的最後一次迭代。
另一種方法我搜索這是針對每次迭代
>for(i in 1:(nrow(roomdata2)))
>for(j in 1:(nrow(meetingtime2)))
>print(paste(roomdata2[i,1],roomdata2[i,2],roomdata2[i,3],
+meetingtime2[j,1],meetingtime2[j,2]))
輸出
[1] "0M02A 16 1 2014-12-22 07:00:00 2014-12-22 07:30:00"
[1] "0M02A 16 1 2014-12-22 07:30:00 2014-12-22 08:00:00"
[1] "0M02A 16 1 2014-12-22 08:00:00 2014-12-22 08:30:00"
[1] "0M02A 16 1 2014-12-22 08:30:00 2014-12-22 09:00:00"
[1] "0M02A 16 1 2014-12-22 09:00:00 2014-12-22 09:30:00"
[1] "0M03A 8 0 2014-12-22 07:00:00 2014-12-22 07:30:00"
[1] "0M03A 8 0 2014-12-22 07:30:00 2014-12-22 08:00:00"
[1] "0M03A 8 0 2014-12-22 08:00:00 2014-12-22 08:30:00"
[1] "0M03A 8 0 2014-12-22 08:30:00 2014-12-22 09:00:00"
[1] "0M03A 8 0 2014-12-22 09:00:00 2014-12-22 09:30:00"
[1] "0M03B 12 1 2014-12-22 07:00:00 2014-12-22 07:30:00"
[1] "0M03B 12 1 2014-12-22 07:30:00 2014-12-22 08:00:00"
[1] "0M03B 12 1 2014-12-22 08:00:00 2014-12-22 08:30:00"
[1] "0M03B 12 1 2014-12-22 08:30:00 2014-12-22 09:00:00"
[1] "0M03B 12 1 2014-12-22 09:00:00 2014-12-22 09:30:00"
#however the values are not separated, they are just in one set of string for each row.
的期望結果的連續打印功能是一個表等的正上方,而是一個與數據幀每個值都在一個單獨的列中(每個日期在一列中設置爲&時間)。
我已經看過列表,lapply,foreach,但我無法將頭圍繞解決方案。 任何幫助將不勝感激,我是一個初學者,所以我渴望學習。
乾杯 *的dputs
>dput(meetingtime2)
結構(列表(ST =結構(1:5,.Label = C( 「22/12/2014 7:00」, 「22日/ 12/2014年7月30日「,」2014年12月22日8:00「,」2014年12月22日8:30「,」2014年12月22日9:00「 ),class =」factor「結構(1:5,.Label = c(「22/12/2014 7:30」, 「2014年12月22日8:00」,「22/12/2014 8:30」,「22/12/2014)9:00「,」22/12/2014 9:30「 ),class =」factor「)),.Names = c(」ST「,」ET「),row.names = c(NA, -5L),class =「data.frame」)
>dput(roomdata2)
結構(列表(房間=結構(1:3,.Label = C( 「0M02A」, 「0M03A」, 「0M03B」),類= 「因子」),容量= C(16L,8L ,12L),Video.Conference = c(1L, 0L,1L)),.Names = c(「Room」,「Capacity」,「Video.Conference」),row.names = c(NA, -3L )的class = 「data.frame」)
你能不能把輸出dput的' (meetingtime2)'和'dput(roomdata2)'在你的問題中? –