Size: a a a

R language and Statistical data analysis

2020 March 02

PU

Philipp Upravitelev in R language and Statistical data analysis
чем меньше зависимостей и операций, тем лучше
так-то можно и в data.table это перегнать и .N сделать
источник

PU

Philipp Upravitelev in R language and Statistical data analysis
если что, я сам не знаю решение, просто коллега картинки шатает и речь зашла - ему нужен самый частотный цвет в семпле пикселей
а мне интересно стало
источник

ГД

Григорий Демин in R language and Statistical data analysis
Матрица, как я понимаю, целочисленная значения от 0 до 255?
источник

PU

Philipp Upravitelev in R language and Statistical data analysis
да. даже 0:31
источник

VV

Vladimir Volokhonsky in R language and Statistical data analysis
Сливаем матрицу в вектор строк через paste, сортируем, циклом считаем для каждой уникальной группы частоты, сбрасывая "лидера".
Но я сомневаюсь, что это будет быстрее table.
источник

AP

Anton Pysanka in R language and Statistical data analysis
соединить 3 столбца и загуглить mode r
источник

PU

Philipp Upravitelev in R language and Statistical data analysis
Vladimir Volokhonsky
Сливаем матрицу в вектор строк через paste, сортируем, циклом считаем для каждой уникальной группы частоты, сбрасывая "лидера".
Но я сомневаюсь, что это будет быстрее table.
это решение, которое приходит в голову в первую очередь
но это дорогое по времени решение, поэтому и хочется другие и более адекватные варианты найти
источник

VV

Vladimir Volokhonsky in R language and Statistical data analysis
Я честно говоря сильно сомневаюсь, что там что-то сильно адекватнее-то будет в базовом R. Всё упирается в то, как считать моду. В этих ваши стэковерфлоу вот такая функция для моды присутствует:
Mode <- function(x) {
 ux <- unique(x)
 ux[which.max(tabulate(match(x, ux)))]
}
источник

VV

Vladimir Volokhonsky in R language and Statistical data analysis
Можно попробовать ещё считать частоты первого столбца и сразу выкидывать редкие, потом на сокращённом наборе считать второй столбец и только потом третий.
источник

VV

Vladimir Volokhonsky in R language and Statistical data analysis
Но это ну такой, кривоватый способ-то, с возможностью ошибок. Но на конкретных данных может можно какой-то такого рода хак придумать.
источник

PD

Pavel Demin in R language and Statistical data analysis
была похожая идея: посчитать rowSums(), оставить матрицу только с самой частой суммой - она будет относительно невелика, и уже в ней тэйблом искать. Но не считал и не уверен, что это супер ускорит
источник

В

Виктория in R language and Statistical data analysis
добрый день! Подскажите, пожалуйста, такой момент. Пытаюсь авторизоваться в GoogleAdwords через пакет RAdwords. При авторизации запрашиваются 3 параметра - Client ID, Client Secret, Developer Token.  Их необходимо вставить в консоль и пройти авторизацию дальше. Результат авторизации записывается в файл google.auth. Я неправильно указала Client Secret, необходимо повторить процесс, но когда хочу пройти авторизацию заново, почему-то именно этот шаг пропускается автоматически и я ничего не могу туда вставить. Пробовала удалять файл в директории, в которой работаю, но почему-то не помогло.
http://joxi.ru/Y2L7RbOcQGwoMm
источник

АК

Артём Клевцов in R language and Statistical data analysis
Philipp Upravitelev
друзья, задачка
есть матрица n*3
надо найти строку, которая встречается чаще всего
как это лучше сделать?

table() дорого по времени, .N и дата.тейбл использовать нельзя
Rcpp.
источник

PU

Philipp Upravitelev in R language and Statistical data analysis
напишешь? :)
я вот не напишу, например
источник

АК

Артём Клевцов in R language and Statistical data analysis
Дай код для генерации матрицы пока и имеющиеся решения, чтобы сравнивать. Я прикину решение.
источник

АК

Артём Клевцов in R language and Statistical data analysis
источник

ГД

Григорий Демин in R language and Statistical data analysis
Philipp Upravitelev
да. даже 0:31
Как-то так.  splitter можно компактнее сделать вместо 100 что-то типа 32. Возможно, тогда, будет чуть быстее.
N = 10000

set.seed(123)
matr = matrix(
   sample(0:31, N*3, replace = TRUE),
   nrow = N
)

splitter = matr[,3]*100*100 + matr[,2]*100 + matr[,1]

res = tabulate(splitter)
which(splitter == which.max(res))
источник

АК

Артём Клевцов in R language and Statistical data analysis
Григорий Демин
Как-то так.  splitter можно компактнее сделать вместо 100 что-то типа 32. Возможно, тогда, будет чуть быстее.
N = 10000

set.seed(123)
matr = matrix(
   sample(0:31, N*3, replace = TRUE),
   nrow = N
)

splitter = matr[,3]*100*100 + matr[,2]*100 + matr[,1]

res = tabulate(splitter)
which(splitter == which.max(res))
which.max вернёт первую и не гарантирует стабильность результата.
источник

АК

Артём Клевцов in R language and Statistical data analysis
Григорий Демин
Как-то так.  splitter можно компактнее сделать вместо 100 что-то типа 32. Возможно, тогда, будет чуть быстее.
N = 10000

set.seed(123)
matr = matrix(
   sample(0:31, N*3, replace = TRUE),
   nrow = N
)

splitter = matr[,3]*100*100 + matr[,2]*100 + matr[,1]

res = tabulate(splitter)
which(splitter == which.max(res))
Идея хорошая и работать должно быстро. Только можно коэфициенты рандомить.
источник

PU

Philipp Upravitelev in R language and Statistical data analysis
вот два наколеночных варианта
set.seed(123)
x <- matrix(nrow = 10, ncol = 3, data = sample(2, 30, replace = TRUE))
mx <- x
library(data.table)
f_dt <- function(mx) {
 mx <- as.data.frame(mx)
 setDT(mx)
 mx <- mx[, .N, by = list(V1, V2, V3)][order(-N)][1]
 matrix(nrow = 1, ncol = 3, data = unlist(mx[, list(V1, V2, V3)]))
}
f_dt(x)


f_base <- function(mx) {
 mx <- paste(mx[, 1], mx[, 2], mx[3])
 mx <- sort(table(mx), decreasing = TRUE)
 mx <- names(mx[1])
 mx <- as.numeric(strsplit(mx, '\\s')[[1]])
 matrix(nrow = 1, ncol = 3, data = mx)
}
f_base(x)
источник