1

ベクトル(A、より大きな行列の列名)と行列(B)があります。

A = q、w、e、r、t

B =

q 1 
y 2
w 3
e 4
u 5
t 6
r 7

A を B の最初の列と一致させます

マッチAB =

      q 1
      w 3
      i 4
      e 5 
      t 6
      r 7

2列目だけが必要です。A と一緒に使用します。順序が同じでない場合。ここで、a = q、w、e、r、t。matchAB は、q、w、e、t、r になります。A でアルファベット順の並べ替えをしたくありません。matchAB を A と同じ順序にしたいのですが、何か助けはありますか?

ありがとう !

mnelの質問によると:

dput(a)

a =c("q", "w", "e", "r", "t")

dput(b)

b <- structure(c("q", "1", "y", "2", "w", "3", "i", "4", "e", "5",
    "t", "6", "r", "7"), .Dim = c(2L, 7L), .Dimnames = list(c("bi","bb"), NULL))


ind=which(match(b[1,],a) != 0)

> b[,ind]=

[,1] [,2] [,3] [,4] [,5]

bi "q"  "w"  "e"  "t"  "r"

bb "1"  "3"  "5"  "6"  "7"

だから、私が望む出力は、

b[,ind]=

[,1] [,2] [,3] [,4] [,5]

bi "q"  "w"  "e"  "r"  "t"

bb "1"  "3"  "5"  "7"  "6"
4

2 に答える 2

2

場合によっては、引数の順序を、最初に考える順序とは逆にする必要があります。

> a = c('q','w','e','r','t'); b[, match(a,b[1,])]
#-------
   [,1] [,2] [,3] [,4] [,5]
bi "q"  "w"  "e"  "r"  "t" 
bb "1"  "3"  "5"  "7"  "6" 
于 2012-11-02T07:10:54.633 に答える
1

質問を投稿するときはdput、mnelが提案しているように使用すると非常に役立ちます。

あなたの質問は本当に索引付けについてです。最初にそれをどのように行うかを示し、次にそれを分解します。

データが再作成されました(今後は1dput`を使用してください):

B <- read.table(text="q 1 
y 2
w 3
e 4
u 5
t 6
r 7", stringsAsFactors = TRUE)

A <- c('q','w','e','r','t')

私のやり方:

data.frame(A=A, B=B[B[, 1] %in% A, 2])

内訳: 上の列を要素として設定していることに注意してください。これで注文が保持されます。最初に、%in%演算子はBの列1の要素をAと照合し、要素として順序が尊重されます。

B[, 1] %in% A
# >     B[, 1] %in% A
# [1]  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE

次に、この論理ベクトルをBの新しいインデックス内で使用し、列2のみを選択します。

B[B[, 1] %in% A, 2]
# [1] 1 3 4 6 7
于 2012-11-02T06:06:54.120 に答える