0

以下に示すようなデータフレームの例があります。

> x=data.frame(id=1:5,c1=letters[1:5],c2=letters[13:17])
> x
  id c1 c2
1  1  a  m
2  2  b  n
3  3  c  o
4  4  d  p
5  5  e  q

このデータフレームから、別のベクトルに基づいて行ごとに異なる列を選択するベクトルを作成したいと思います。したがって、そのベクトルが

> vars
[1] 1 2 2 1 1 
> 

xの1行目、列1、xの2行目、列2などが必要です。したがって、期待される出力ベクトル(またはデータフレーム)は、if vector

a n o d e

データフレームの場合

id V1
 1  a
 2  n
 3  o
 4  d
 5  e

どんな助けでも、大いに感謝します。

4

1 に答える 1

3

マトリックスを使用してデータ フレームを「スライス」できます。

y=data.frame(1:5,c(1,2,2,1,1))
x[2:3][as.matrix(y)]

結果:

[1] "a" "n" "o" "d" "e"

関数を作成してこれを一般化しましょう

selector=function(x)matrix(c(seq_along(x),x),ncol=2)

最初に無視される列が 1 つあることに注意してください。選択ベクトル v に 1 を追加します。

v=c(1,2,2,1,1)
x[selector(v+1)]

結果

[1] "a" "n" "o" "d" "e"
于 2012-09-07T17:46:35.493 に答える