По существу у меня есть фрейм данных. Из этого я взял 2 новых индекса, чтобы указать мне значение для каждой строки, которая будет использоваться при изменении этого набора данных. У меня также есть код для замены значений, поскольку я хотел бы, чтобы они были заменены (по существу, до столбца, указанного новым индексом, изменяется на 0). Я просто не уверен, как все это собрать.
Это тот фрейм данных, с которым я первоначально работал, ind1 и ind2 использовались для создания новых индексов, которые у меня есть как отдельные векторы.
COL1 <- c(1,1,1,NA,1,1)
COL2 <- c(1,NA,NA,1,1,1)
COL3 <- c(1,1,1,1,1,1)
ind1 <- c(1,2,1,2,1,2)
ind2 <- c(3,3,2,3,3,3)
Data <- data.frame (COL1, COL2, COL3, ind1, ind2)
Data
COL1 COL2 COL3 ind1 ind2
1 1 1 1 3
1 NA 1 2 3
1 NA 1 1 2
NA 1 1 2 3
1 1 1 1 3
1 1 1 2 3
новые индексы векторов выглядят следующим образом и в настоящее время не находятся во фрейме данных
actual <- c(5,3,4,1,1,2)
prediction <- c(1,1,2,5,5,1)
По сути, я бы хотел, чтобы функция оценивала фактический> прогноз длякаждая строка, и если это true , то она запускает функцию ниже в этой строке
replace(Data, cbind(rep(1:NROW(Data), Data$ind1), sequence(Data$ind1)), 0)
и, если фактический> прогноз равен false затем он запускает функцию ниже в этой строке
replace(Data, cbind(rep(1:NROW(Data), Data$ind2), sequence(Data$ind2)), 0)
для этого примера фрейма данных. Я ожидаю, что на выходе будет новый фрейм данных, где
Data2
COL1 COL2 COl3 ind1 ind2
1 1 1 1 3
1 1 1 2 3
1 1 1 1 2
0 0 0 2 3
0 0 0 1 3
0 0 1 2 3
То, что я до сих пор пробовал, это ...
Data2<- c()
for (i in 1:NROW (Data)) {if (actual < prediction) {
Data2[i]<- replace(Data, cbind(rep(1:NROW(Data), Data$ind1), sequence(Data$ind1)), 0)
} else {
Data2[i]<- replace(Data, cbind(rep(1:NROW(Data), Data$ind2), sequence(Data$ind2)), 0)
}
}
Это дает мне список выходных списков для Data2. Но то, что я ищу, - это новый фрейм данных.