1

ループを使用して、大きなデータ フレームの行 (サンプル) の特定の値に対応する列 (変数) を出力しようとしています。例えば

c1<-c(1,2,3) c2<-c(4,5,6) c3<-c(7,8,9) data<-as.data.frame(rbind(c1,c2,c3))

    row V1  V2  V3
    r1  1   2   3
    r2  4   5   6
    r3  7   8   9

ri=j (j は値のリスト) の場合、行 i の値 j が挿入される列をデータ フレームに追加します。たとえば、リストのターゲット値が

r1=2の場合

r2=12の場合

r3=7の場合

その後、結果は次のようになります

    row V1  V2  V3   V4  V5
    r1  1   2   3   2   1    
    r2  4   5   6   5   4
    r3  7   8   9   8   7

何かアドバイス?

4

3 に答える 3

1
i <- c(1, 2, 3)
j <- c(2, 12, 7)

col.idx <- mapply(match, j, split(data, rownames(data))[i])
# [1]  2 NA  1

data.frame(data, data[i, na.omit(col.idx)])
#    V1 V2 V3 V2.1 V1.1
# c1  1  2  3    2    1
# c2  4  5  6    5    4
# c3  7  8  9    8    7
于 2013-06-19T02:14:15.400 に答える
1

行インデックスrows <- c(1,2,3)のベクトルと対応する値のベクトルがあるとしますval <- c(2, 12, 7)

追加する必要があるすべての列を取得するためのベクトルの作成を開始します。

newcols <- c()

for(i in seq_along(rows))
{
  temp <- which(data[rows[i],]==val[i])

  if(length(temp)==0) temp <- NA

  newcols[i] <- temp
}

次に、列を追加するだけです。

result <- cbind(data, data[, newcols[!is.na(newcols)]])
于 2013-06-19T01:57:40.623 に答える