Nano Hash - криптовалюты, майнинг, программирование

rbind списки для data.frame в цикле for

Это (бессмысленная) усеченная версия моего цикла for в R, который вычисляет землепользование для некоторых полигонов. Он хорошо перебирает данные, за исключением случаев, когда он должен привязывать вычисления к data.frame, используя plyr::rbind.fill(). Я получаю желаемый результат, но также (то же самое количество) дополнительные нежелательные столбцы, заполненные значениями NA (я думаю, это как-то связано с именами столбцов).

agri_coverage <- data.frame(matrix(rnorm(3), nrow=1))
set.seed(23)
agri <- rnorm(10, 0.5)

land_use <- NULL
for (i in seq_along(agri)) {
name <- agri[i]
if (name > 1) {
  wl <- as.list(unlist(agri_coverage[ ,1:3]))
  } else {   
  wl <- as.list(rep(NA, 3))
  }
  land_use <- rbind.fill(land_use, data.frame(wl)) #combine output
}

Какая лучшая функция/метод объединяет эти списки в один фрейм данных и почему создаются эти дополнительные столбцы?

Я пробовал другие функции, такие как rbind(), data.table::rbindlist(), но безуспешно.

15.07.2016

  • rbind.fill (и это преемник dplyr bind_rows) ищет одинаковые имена для каждого вектора, чтобы выровнять их, а ваши NA не имеют имен. Если вы измените else на wl <- as.list(setNames(rep(NA, 3), names(agri_coverage))), это сработает. Более типичным базовым подходом будет do.call(rbind, lapply(agri, function(x){if(x > 1){agri_coverage} else {rep(NA, 3)}})) 15.07.2016
  • Я думал путь к сложному. Спасибо за объяснения! 15.07.2016

Ответы:


1

Причина, по которой вы получаете дополнительные нежелательные столбцы, заполненные NA, заключается в том, что ваш список, созданный в вашем условии else, не называется так же, как список в вашем условии if. rbind.fill добавляет столбцы с одинаковыми именами друг к другу, а любые столбцы с разными именами заполняются NA. Из справки rbind.fill:

r связывает список фреймов данных, заполняя отсутствующие столбцы с помощью NA.

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

names(wl) <- names(agri_coverage)

Затем код становится:

land_use <- NULL
for (i in seq_along(agri)) {
  name <- agri[i]
  if (name > 1) {
    wl <- as.list(unlist(agri_coverage[ ,1:3]))
  } else {   
    wl <- as.list(rep(NA, 3))
    names(wl) <- names(agri_coverage)
  }
  land_use <- rbind.fill(land_use, data.frame(wl)) #combine output
}

что приводит к:

 land_use
          X1        X2         X3
1         NA        NA         NA
2         NA        NA         NA
3  0.2182885 -1.046535 -0.2886886
4  0.2182885 -1.046535 -0.2886886
5  0.2182885 -1.046535 -0.2886886
6  0.2182885 -1.046535 -0.2886886
7         NA        NA         NA
8  0.2182885 -1.046535 -0.2886886
9         NA        NA         NA
10 0.2182885 -1.046535 -0.2886886
15.07.2016
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..