Цикл по столбцам и фреймам данных для агрегирования данных в R - PullRequest
1 голос
/ 08 марта 2019

Я пытаюсь суммировать значения в нескольких столбцах и повторять этот процесс в нескольких фреймах данных.Я запустил агрегатную функцию вне цикла for, и она дала желаемые результаты.

Однако внутри цикла for я получаю ошибку «объект не найден» при попытке перебрать кадры данных, а ошибку «переменная длина отличается» при попытке перебрать имена столбцов.Любой совет, как решить одну или обе из этих ошибок?Есть ли лучший способ сделать это вообще?Я внимательно просмотрел форум, и ни одно из предыдущих предложений не помогло решить проблему.Спасибо за чтение!

for (i in colnames(m)){
n <- paste("m", i, sep = "")
n <- aggregate(
i~key + plot + blk + trt + field + timepoint + time_code, 
data=m, FUN = sum)
}

ilist <- list(m, d, ss, seg)
for (i in 1:length(ilist)){
n <- paste(i, sep = "")
n <- aggregate(
stems~key + plot + blk + trt + field + timepoint + time_code, 
data=i, FUN = sum)
}

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Похоже, вы используете правила из циклов for других языков вместо конкретных правил R.

Я бы переписал ваш код таким образом (хотя, помните, я невидел ваши данные):

nameList <- colnames(m)    
for (i in length(nameList)){
  n <- paste(nameList[m], i, sep = "")
  n <- aggregate(
    i~key + plot + blk + trt + field + timepoint + time_code, 
    data=nameList[m], FUN = sum)
}

ilist <- list(m, d, ss, seg)
for (i in 1:length(ilist)){
  n <- paste(ilist[i], sep = "")
  n <- aggregate(
    stems~key + plot + blk + trt + field + timepoint + time_code, 
    data=ilist[i], FUN = sum)
}
1 голос
/ 08 марта 2019

В этой строке:

stems~key + plot + blk + trt + field + timepoint + time_code, data=i, FUN = sum)

Вы устанавливаете данные в индекс цикла.Вам нужно сделать:

stems~key + plot + blk + trt + field + timepoint + time_code, data=ilist[i], FUN = sum)

Я не уверен, решит ли это все ваши проблемы с этим.Что касается вашего другого вопроса о том, есть ли лучший способ - возможно, посмотрите на lapply?

...