Я застрял в написании кода, и мне нужна ваша помощь. Проблема заключается в следующем:
У меня есть фрейм данных под названием «таблица», который выглядит следующим образом:
> dput(table)
structure(list(ID = c(1405720, 1700870, 1774430, 1844160, 2187710,
2215320, 2513640, 2581470, 2880020, 3092980, 5514080, 5519800,
5537980, 5553200, 5556930, 5562970, 5565930, 5605290, 5632260,
5632260), LA = c(1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1,
0, 0, 1, 1, 1), tA = c(450, 480, 590, 400, 335, 430, 480, 1035,
570, 590, 480, 484, 528, 460, 380, 520, 420, 420, 515, 515),
tB = c(1080, 810, 930, 960, 960, 960, 810, 1035, 765, 1080,
990, 1140, 528, 750, 660, 855, 975, 975, 990, 990)), row.names = c(NA,
20L), class = "data.frame")
В этом фрейме данных «ID» представляет человека и «tA» и «tB» представляет два времени дня, измеряемых в минутах и начинающихся в 00:00.
У меня также есть еще один фрейм данных под названием «df_time», который содержит «идентификаторы» и столбец для каждой минуты день, заполненный нулями.
df_time <- matrix(0,nrow = 20 , ncol = 1441, byrow=TRUE)
df_time[,1] <- table$ID
Теперь я хочу изменить нулевые значения в df_time в зависимости от условия. Условие выглядит следующим образом: если таблица $ LA == 1, заполните столбцы в df_time от таблицы $ tA до таблицы $ tB единицами. В противном случае оставьте 0 в df_time. Вот небольшой пример: скажем, в первой строке «таблицы» LA == 1 и tA == 450 и tB == 600. Теперь код должен заполнить все столбцы в первой строке df_time номерами столбцов. с 451 до 601 с единицами. (Мне нужно было добавить +1 ко времени «tA» и «tB», потому что столбец «ID» занимает первое место / столбец в моем фрейме данных df_time, и, таким образом, минуты дня начинаются со второго столбца.)
Следующий код - это один из фрагментов кода, который я пытался использовать. Надеюсь, этот код также поможет вам понять условие. Мне нужно было добавить +1 ко времени «tA» и «tB» из-за того, что столбец «ID» занимает первое место / столбец в моем фрейме данных df_time и, таким образом, минуты дня начинаются со второго столбца. z - это просто случайное присвоение, которое я выбрал для оператора else. Он ничего не делает.
for(i in nrow(table)){
if (table[i,"LA"] == 1){
x = table[i, "tA"]+1
y = table[i, "tB"]+1
} else {
z = 0
}
df_time[i, x:y] <- 1
}