У меня есть два набора данных в R (эти таблицы ниже - это просто уменьшенные версии), которые я хотел бы объединить в новый фрейм данных.
> 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", "22.12.2014 8:00", "22.12.2014 8:30", "22.12.2014 9:00"), class = "factor"), ET = структура (1: 5, .Label = c ("22.12.2014 7 : 30 "," 22.12.2014 8:00 "," 22.12.2014 8:30 "," 22.12.2014 9:00 "," 22.12.2014 9:30 "), класс = "фактор")), .Names = c ("ST", "ET"), row.names = c (NA, -5L), class = "data.frame")
>dput(roomdata2)
структура (список (Комната = структура (1: 3, .Label = c ("0M02A", "0M03A", "0M03B"), class = "factor"), Вместимость = c (16L, 8L, 12L), Видео. Conference = c (1L, 0L, 1L)), .Names = c ("Комната", "Вместимость", "Видео.Конференция"), row.names = c (NA, -3L), class = "data.frame ")
dput(meetingtime2)
иdput(roomdata2)
? - person Marat Talipov   schedule 13.01.2015