#r
#r
Вопрос:
Я пытаюсь создать цикл for, который ссылается на другое имя столбца с каждой итерацией. Таблица данных, которую я задаю, называется «комбинированной», а столбцы, на которые я пытаюсь ссылаться, просто называются 1, 2, 3, вплоть до 84. Я надеюсь, что каждый выходной объект, созданный циклом for, вычислит максимальное значение в столбце i (в «Комбинированном») для каждого уникального значения в столбце «sci_name» (также в «Комбинированном»).).
Это то, что я придумал до сих пор:
X <- c(1:84)
for (i in X) {
name <- paste("er", i, sep="_")
assign(name, Combined[,max(`i`), by=sci_name])
}
Этот код выполняется, но он просто присваивает одинаковые значения каждой позиции в каждом из выходных объектов er_ #, вместо того, чтобы фактически принимать максимальное значение для столбца i .
Вне цикла for я обнаружил, что этот код работает сам по себе, но не могу понять, как изменить номер заголовка столбца в цикле (и предпочел бы не выполнять все 84 итерации вручную):
er_1 <- Combined[,max(`1`), by=sci_name]
Комментарии:
1. В цикле for вы можете сохранить значения в именованный список, а затем использовать
list2env()
.
Ответ №1:
Вы не предоставили никаких полезных данных, поэтому я буду использовать mpg
набор данных:
library(tidyverse)
mpg %>%
group_by(cyl) %>%
summarize(across(c(cty, hwy), max))
Это позволит организовать вывод в tibble.
Комментарии:
1. Это также работает само по себе, но, похоже, я не могу заставить его функционировать внутри цикла for. Я думаю, что проблема связана со ссылкой на число в качестве заголовка столбца.
2. В моем решении вам не нужен цикл for
3. Ах! Теперь я понимаю. Это работает отлично. Спасибо!