Я работаю в программе r и мне нужна помощь в написании кода. У меня есть размерный массив 50 на 3 на 8. Большинство ячеек в этом массиве равны нулю, но некоторые из них — NA. Мне нужно заменить нули в массиве последовательностью чисел, чтобы все ячейки в строке имели одинаковый номер. Последовательность начинается с 1 и продолжается до общего количества строк в массиве. Кроме того, должны остаться NA, чтобы ячейки с NA не могли быть перезаписаны. Кроме того, некоторые строки все являются NA, поэтому последовательность строк будет не ровно 400 (50 x 8), а немного меньше. Я нашел информацию о том, как решить каждую часть этой проблемы, но я изо всех сил пытаюсь собрать все части вместе так, чтобы это работало. Я очень ценю вашу помощь в написании этого кода r.
Пример для этого массива:
y‹-array(0,dim=c(10,3,2))
#add NAs
y[4,2:3,1]‹ -NA
y[8,1:3,1]‹-NA
y[10,1:3,2]‹-NA
Мне нужно заменить 0 на такую последовательность, что первый Матрица в массиве имеет строки, пронумерованные от 1 до 9 (все ячейки в строке 1 = 1, 2 = 2 и т. д., с оставленными NA). Матрица 2 будет иметь строки с номерами от 10 до 18.
Заполнение массива построчно последовательностью чисел в r
29.11.2017
- Было бы полезно привести меньший пример того, к чему именно вы стремитесь. Я предполагаю, что вы могли бы объяснить проблему также с помощью простого двумерного массива, например, значений 4x3. Кроме того, пожалуйста, будьте более конкретными в отношении информации о том, как решить каждую часть проблемы - вы можете использовать ссылки для этого. 30.11.2017
Ответы:
1
Насколько я могу судить, это то, что вы хотите (в небольшом масштабе для иллюстрации).
## Set up example data
## (you should provide something like this in your question!!)
set.seed(47)
d = c(5, 2, 3)
x = array(sample(c(0, NA), size = prod(d), replace = T), dim = d)
# set a row to all na:
x[2, , ] = NA
Сначала мы находим строки, которые не все NA
, и вычисляем последовательность замены. Затем мы делаем замену в простом цикле for
.
r = ! apply(is.na(x), MARGIN = 1, all)
rows = which(r)
rn = seq_along(r[r])
for (i in seq_along(rows)) {
x[rows[i], , ][x[rows[i], , ] == 0] = rn[i]
}
x
# , , 1
#
# [,1] [,2]
# [1,] NA NA
# [2,] NA NA
# [3,] NA 2
# [4,] NA NA
# [5,] NA NA
#
# , , 2
#
# [,1] [,2]
# [1,] 1 NA
# [2,] NA NA
# [3,] 2 2
# [4,] NA 3
# [5,] NA 4
#
# , , 3
#
# [,1] [,2]
# [1,] 1 1
# [2,] NA NA
# [3,] NA 2
# [4,] 3 NA
# [5,] NA NA
Если это не то, что вы хотите, уточните свой вопрос, предоставив образец ввода и соответствующий желаемый результат.
Адресация правок на вопрос, еще два метода: уродливый понятный способ и слишком умный способ:
# sample data
set.seed(47)
d = c(5, 2, 3)
x = array(sample(c(0, NA), size = prod(d), replace = T), dim = d)
# nested for loopsr
r = !apply(is.na(x), c(1, 3), all)
counter = 0
for (k in 1:dim(x)[3]) {
for (i in 1:dim(x)[1]) {
if(r[i, k]) {
counter = counter + 1
x[i, , k] = x[i, , k] + counter
}
}
}
x
# now the clever way
# reset the data
set.seed(47)
x = array(sample(c(0, NA), size = prod(d), replace = T), dim = d)
xm = matrix(aperm(x, c(1, 3, 2)), ncol = 2)
axm = ! apply(is.na(xm), 1, all)
xm = xm + cumsum(axm)
aperm(array(c(xm), dim = d[c(1, 3, 2)]), c(1, 3, 2))
# , , 1
#
# [,1] [,2]
# [1,] NA NA
# [2,] 1 1
# [3,] NA 2
# [4,] NA NA
# [5,] NA NA
#
# , , 2
#
# [,1] [,2]
# [1,] 3 NA
# [2,] NA 4
# [3,] 5 5
# [4,] NA 6
# [5,] NA 7
#
# , , 3
#
# [,1] [,2]
# [1,] 8 8
# [2,] NA 9
# [3,] NA 10
# [4,] 11 NA
# [5,] NA NA
29.11.2017
Новые материалы
Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..
Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально
Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..
Частный метод Python: улучшение инкапсуляции и безопасности
Введение
Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..
Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования
Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..
Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv)
Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..
Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..
Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..
a[1, , ]
получают 1,a[2, , ]
все отсутствуют, поэтому там ничего нет, поэтому нули вa[3, , ]
получают 2 (как я изначально интерпретировал вашу проблему). 02.12.2017