Среднее элементов в списке data.frames

Что-то вроде этого?

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
anchors = [td.find('a') for td in soup.findAll('td')]

Это должно найти первое «а» внутри каждого «td» в html, который вы предоставляете. Вы можете настроить td.find, чтобы быть более конкретным, или использовать findAll, если у вас есть несколько ссылок внутри каждого td.

UPDATE: комментарий Daniele, если вы хотите убедиться, что у вас нет None в списке, вы можете изменить понимание списка таким образом:

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
anchors = [a for a in (td.find('a') for td in soup.findAll('td')) if a]

Что в основном просто добавляет проверку, чтобы увидеть, есть ли у вас фактический элемент, возвращаемый td.find('a').

23
задан cmaher 6 May 2018 в 04:24
поделиться

3 ответа

Другой подход, использующий только base функции для изменения структуры объекта:

listVec <- lapply(all.dat, c, recursive=TRUE)
m <- do.call(cbind, listVec)

Теперь вы можете вычислить mean с помощью rowMeans или median с помощью apply:

means <- rowMeans(m)
medians <- apply(m, 1, median)
6
ответ дан Oscar Perpiñán 6 May 2018 в 04:24
поделиться

Не могли бы вы просто использовать вложенные lapply() вызовы?

Похоже, это дает правильный результат на моей машине

mean.dat <- lapply(all.dat, function (x) lapply(x, mean, na.rm=TRUE))
1
ответ дан richiemorrisroe 6 May 2018 в 04:24
поделиться

Вам было бы проще изменить структуру данных, объединив три двумерные матрицы в один трехмерный массив (используя библиотеку abind). Тогда решение будет более прямым, используя apply и указав размеры для усреднения.

РЕДАКТИРОВАТЬ:

Когда я ответил на вопрос, он был помечен homework, поэтому я просто дал подход. Оригинальный плакат удалил этот тег, поэтому я возьму его / ее на слово, что это не так.

library("abind")

all.matrix <- abind(all.dat, along=3)
apply(all.matrix, c(1,2), mean)
11
ответ дан Brian Diggs 6 May 2018 в 04:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: