Не знаю, как кратко сформулировать эту проблему, так что название может быть плохим, и ответ может быть уже там. По сути, у меня проблема с вложенным l oop для вставки значений в новый фрейм данных.
У меня есть большой файл данных с повторяющимися именами и соответствующими инвестициями и бонусами, которые необходимо переупорядочить для создания новой таблицы / dataframe с итогами для каждого из связанных столбцов. Вот простой пример таблицы данных, которая у меня есть:
Тестовые данные
Я написал следующий код с тестовыми данными, файл CSV, написанный в Excel, и сохранено как Book1:
Name <- c("Name 1","Name 1","Name 1","Name 1","Name 1","Name 2","Name 2","Name 2",
"Name 3","Name 3","Name 3","Name 3","Name 3","Name 4","Name 4","Name 4")
Initial.Value <- c(142, 847, 982, 867, 898, 437, 169, 478,260, 789, 216, 373, 820,
985, 943, 325)
Bonus.1 <- c(4, 2, 5, 0, 9, 6, 6, 7, 5, 8, 5, 5, 5, 8, 8, 8)
Bonus.2 <- c(4, 4, 0, 10, 5, 10, 2, 10, 8, 3, 9, 6, 3, 3, 2, 1)
Bonus.3 <- c(3, 0, 2, 7, 5, 0, 3, 6, 9, 5, 1, 2, 1, 5, 3, 2)
Bonus.4 <- c(1, 10, 2, 3, 2, 5, 7, 5, 3, 1, 6, 10, 3, 4, 7, 9)
data_file <- data.frame(Name, Initial.Value, Bonus.1, Bonus.2, Bonus.3, Bonus.4)
Rows <- unique(data_file$Name)
Output_file <- data.frame(matrix(0, ncol = length(Rows), nrow = 5))
colnames(Output_file) <- Rows
rownames(Output_file) <- colnames(data_file)[c(2,3,4,5,6)]
for(i in length(Rows)){ # Looks at each name in turn
Indices_Of_Interest <- which(lapply(data_file$Name,
function(x) any(match(x, Rows[i]))) == TRUE)
for(k in length(Output_file[, 1])){ # Goes down the Output_File
row_header <- rownames(Output_file)[k]
col_header <- Rows[i]
Output_file[row_header, col_header] <- sum(data_file[row_header][Indices_Of_Interest, ])
}
}
Когда я запускаю этот код построчно, он работает, обновляя каждую ячейку по очереди, но когда я запускаю for l oop, кажется, что он действует только на последнюю ячейку, оставив остальные ячейки равными нулю, как показано ниже:
Выходной файл, правильная структура, но неправильно заполнено