私はプログラムrで作業していて、コードを書くのに助けが必要です。私は50×3×8次元の配列を持っています。この配列内のほとんどのセルはゼロですが、いくつかはNAです。配列内のゼロを、行内のすべてのセルが同じ数になるように一連の番号に置き換える必要があります。シーケンスは1から始まり、配列内の合計行数まで実行されます。また、NAsは残っていなければならないため、NAsを持つセルは上書きできません。さらに、一部の行はすべてNAsなので、行の順序は正確には400(50×8)ではありませんが、それよりも小さくなります。私はこの問題の各部分にどのように対処するかについての情報を見つけましたが、すべての作品をうまく組み合わせるために苦労しています。私はこのrコードを書くあなたの助けに大変感謝します。
例、このアレイ用:
Y < -array(0、DIM = Cの(10,3,2))
#addのNA
Y [4,2:3,1] < -NA
Y [8,1:3,1] < -NA
Y [10,1:3,2] < -NA
Iは、配列内の最初の行列は、その行を有するように配列と0を交換する必要があります1〜9の番号を付けます(行1のすべてのセルは1,2 = 2などとなり、NAsはそのまま残ります)。行列2は10から18の番号の行を持っています。配列を行番号順に並べて表示する
答えて
私が言うことができる限り、これはあなたの望むものです(イラストの小規模)。
## 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
ありがとうございます。これはほとんど私が探しているものですが、数値シーケンスは配列内の行列間で継続し、各行列で新しいシーケンスを開始する必要はありません。あなたの例では、行列1は配列の行1を持ち、行列2は2から5の番号の行を持ち、行列3の行は6から8の番号をつけています。 – Lat68
配列の最初の行列のセルが"1"ではなく "2"?それがなぜここで「2」になるのか分かりません。あなたのご意見ありがとうございます。 – Lat68
最初の行 'a [1、、] 'の0が1になるので、' a [2、]] 'はすべて抜けていますので、' a [3、 2を得る(私が元々あなたの問題をどのように解釈したか)。 – Gregor
- 1. 番号が降順で配列を並べ替え
- 2. 番号を数値順に並べ替える順序付けされていない配列の関数?
- 3. データフレームの行をインデックス番号の順番に並べ替えます
- 4. 配列番号を後ろに並べ替える方法は?
- 5. 配列を別の配列の順番に並べ替えます
- 6. 配列の順番でコレクションを並べ替える
- 7. 関数内で番号付き配列を並べ替える
- 8. メモ帳のステータスバーに行番号と列番号を表示
- 9. リストボックス内のファイルをアルファベット順に番号順に並べ替える
- 10. php/laravel - 配列番号の高い順に並び替える方法
- 11. スパーク・クラスタファイル内のすべての行に順番に番号を付ける
- 12. 配列を優先順位順に並べ替える
- 13. インデックス番号を維持せずに自然順序で配列を並べ替える
- 14. 番号配列を左にソートして並べ替えた場合
- 15. 配列を文字列にコピーして文字列を順番に表示
- 16. 番号の昇順ptree配列
- 17. FFMPEGビデオを並べて、フレーム番号で並べ替えます
- 18. 2番目の単語のアルファベット順に配列を並べ替えます。
- 19. Acumatica - 行番号を表示
- 20. junitテストの実行方法を順番に並べる
- 21. 同じ番号がアルファベット順に並べられている場合は、配列を数値で並べ替えます。
- 22. 並行してジョブの番号を調べるgnu-make
- 23. アルファベット順の配列の並べ替え
- 24. アルファベット順の配列の並べ替え
- 25. csvと並んで2つの配列を並べて表示する
- 26. 番号の並べ替え
- 27. バブル並べ替え番号
- 28. 重複値を順番に並び替える配列
- 29. 2番目の列に従って数値順とアルファベット順に並べ替え
- 30. 順に配列を並べ替え - 最小、最大、2番目の最小、
アドレッシング編集は、さらに2つの方法を疑問視します。私はあなたが、例えば4x3値の単純な2次元配列でも問題を説明できると仮定します。また、「問題の各部分に対処する方法に関する情報」に関して、より具体的に言えば、このためのリンクを使用することができます。 – maschu