1

R の要点をまだ取得しています。行が異なる座標で名前が付けられている 2 つのデータ フレームがあります (例: x_1013y_41403; 以下を参照)。座標は 5 つのセットを形成し、各セットをグリッドにプロットすると十字になります。中心座標は 1 つのデータ フレームにあり、4 つの周辺座標は別のデータ フレームにあります。

Center                  A       B       C      D       E       F
x_723y_6363.txt       554      NA     604     NA     645      NA
x_749y_41403.txt       14      NA       6     NA      13      NA

Peripheral              A       B       C      D       E       F
x_1013y_41403.txt      NA       1      NA      0      NA       0
x_459y_6363.txt        NA       2      NA      1      NA       4
x_485y_41403.txt       NA       0      NA      0      NA       0
x_723y_6100.txt        NA       1      NA      0      NA       3
x_723y_6627.txt        NA       1      NA      0      NA       1
x_749y_41139.txt       NA       1      NA      0      NA       0
x_749y_41667.txt       NA       2      NA      0      NA       0
x_987y_6363.txt        NA       1      NA      0      NA       0

セットを形成するために、周辺座標は中心座標と同じ x または y 位置になります。たとえば、中心座標 x_723y_6363 は、x_723y_6100 と x_723y_6627 (同じ x 位置)、および x_459y_6363 と x_987y_6363 (同じ y 位置) に関連付けられます。

座標をそれぞれのセットに結合し、セットに中心座標の名前を付けたいと思います。上記の場合、各行がセットの合計である 2 行になります。

                        A       B       C      D       E       F
x_723y_6363.txt       554       5     604      1     645       8
x_749y_41403.txt       14       4       6      0      13       0

どうすればこれができるのか、私にはまったくわかりません。正規表現を作成して x 座標と y 座標を個別に選択し、2 つのデータ フレーム間で比較を行うことを考えました。どんな助けでも大歓迎です!

4

2 に答える 2

1

別のオプション:

# function to split coordinates x and y:

f <- function(DF) structure(
    t(sapply(strsplit(row.names(DF), "[_y.]"), `[`, c(2,4))),
    dimnames=list(NULL, c("x", "y")))

# get x and y for peripheral data:

P <- cbind(Peripheral, f(Peripheral))

# get x and y for centers, and mark ids:

C <- cbind(Center, f(Center), id=1:nrow(Center))

# matching:

Q <- merge(merge(P, C[,c("x","id")], all=TRUE), C[,c("y","id")], by="y", all=TRUE)

# prepare for union:

R <- within(Q, {id <- ifelse(is.na(id.y), id.x, id.y); id.x <- NULL; id.y <- NULL})

# join everything and aggregate:

S <- rbind(R, C)

aggregate(S[,3:8], by=list(id=S$id), FUN=sum, na.rm=TRUE)

結果:

  id   A B   C D   E F
1  1 554 5 604 1 645 8
2  2  14 4   6 0  13 0
于 2013-07-05T20:45:23.047 に答える