Я пытаюсь написать функцию , которая использует индексы , которая берет пары ключ-значение и суммирует их.
Вот мои данные:
mydata<-structure(list(groupA = c("Rugby for Chipmunks", "Rugby for Chipmunks", "Rugby for Chipmunks", "Chafing Explained"), First = c(5, 3.57142857142857, 5, 4.5), groupB = c("Pylons for Priests", "Eating Creosote", "Eating Creosote", "Eating Creosote"), Second = c(4, 4, 3.16666666666667, 2.1666667), groupC = c("Wow for YOU!", "Advanced Cats for Bears", "Blue Paint Only", "Mockingbirds"), Third = c(5, 3, NaN, 4), groupD = c("How to Sell Pigeons", "How to Sell Pigeons", "How to Sell Pigoens", "Larger Boulders"), Fourth = c(4.3, 3, 4.1, 3.4), groupE = c("Making Money with Pears", "Making Money with Pears", "Why Walnuts?", "Responding to Idiots Part II"), Fifth = c(5, 3, 5, 4.16666666666667)), row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame"))
Я хочу использовать индексы, потому что мои будущие задачи будут иметь кадры данных с разными именами столбцов и шириной. Мой подход использует функцию, чтобы определить, является ли столбец нечетным / четным, а затем извлечь пары столбцов, пока я не достигну последнего нечетного пронумерованного столбца. Обратите внимание, что функция должна учитывать требуемый порядок нечетно-четных индексов для каждого извлечения (имя группы и соответствующий счет):
odd <- function(x) x%%2 != 0
outfile<-list()
moveit<-function(df){
for (i in 1:dim(df)[2]) # define number of loops
if ( i==dim(df)[2]-1 ) {break} # stop at least odd-numbered column
if ( odd(i)==FALSE) {next} # skip when i is not an odd numbered index
print(i)
outfile[[i+1]]<-df[ ,c(i,i+1)]
}
result<-moveit(mydata)
str(result)
Вы можете видеть, что результатом является только последняя пара ключ-значение. Почему? Как настроить функцию для извлечения всех пар ключ-значение в один кадр данных?