2

R には 2 つのベクトルがあります。一意の要素で構成されるベクトルを生成できますが、ベクトルの各要素のインデックスを知る必要がありますa。たとえば、次のようになります。

 x <- c(0, 0, 2, 4, 8)
 y <- c(1, 4, 6, 6, Inf)
 a <- unique(sort(c(x, y)))

 > a
 [1]   0   1   2   4   6   8 Inf

0(in a)のインデックスがx1andであること、のx2インデックスが1y12x34x4y2

Rでこれを行うにはどうすればよいですか?

4

3 に答える 3

5
sapply(unique(x), function(z) which(x==z)  )

これは非常に基本的なものであり、R の紹介を学習し、コンソールで例を操作する必要があります。

于 2013-04-22T23:36:41.630 に答える
1

元のベクトルに名前を付けて、tapply必要なものを取得するために使用してみませんか

names(x) <- paste0('x', seq_along(x))
names(y) <- paste0('y', seq_along(y))

# combine and sort
xy <- sort(c(x,y))
xy
## x1  x2  y1  x3  x4  y2  y3  y4  x5  y5 
##  0   0   1   2   4   4   6   6   8 Inf 

tapply(names(xy), xy, list)

# $`0`
# [1] "x1" "x2"
# 
# $`1`
# [1] "y1"
# 
# $`2`
# [1] "x3"
# 
# $`4`
# [1] "x4" "y2"
# 
# $`6`
# [1] "y3" "y4"
# 
# $`8`
# [1] "x5"
# 
# $`Inf`
# [1] "y5"
于 2013-04-24T01:57:21.643 に答える
1

a各要素が見つかったベクトルの名前とそのベクトル内の位置を返す関数が必要だと思います。

これはきれいではありませんが、あなたが望むことをするべきです:

fun1 <- function(i) {
        res <- NULL
        if (a[i] %in% x) res <- paste("x",which(x==a[i]),sep="")
        if (a[i] %in% y) res <- c(res, paste(" y",which(y==a[i]),sep=""))
        names(res) <- rep(a[i],length(res))
        return(res)
        }

それから

unlist(sapply(1:length(a), FUN = fun1))

与える

    0     0     1     2     2     4     6     6     8   Inf 
 "x1"  "x2" " y1"  "x3" " y2"  "x4" " y3" " y4"  "x5" " y5"

お探しのアップデートはこれですか?

fun1 <- function(i) {
    res1 <- res2 <- NULL
    if (a[i] %in% x) res1 <- paste("x", which(x %in% a[i]),sep="",collapse=" ")            
    if (a[i] %in% y) res2 <- paste("y", which(y %in% a[i]),sep="",collapse=" ")
    res <- paste(res1,res2,collapse="")
    names(res) <- a[i]
    ascii:::trim(res)
    }

これは、以前と同じ使用法で、

      0       1       2       4       6       8     Inf 
"x1 x2"    "y1" "x3 y2"    "x4" "y3 y4"    "x5"    "y5" 
于 2013-04-23T00:15:58.607 に答える