ここでは、文字ベクタに対して行列インデックスを使用するベースRの方法があります。
## set up matrix
# get names for row and columns
nameVals <- sort(unique(unlist(dat[1:2])))
# construct 0 matrix of correct dimensions with row and column names
myMat <- matrix(0, length(nameVals), length(nameVals), dimnames = list(nameVals, nameVals))
# fill in the matrix with matrix indexing on row and column names
myMat[as.matrix(dat[c("var1", "var2")])] <- dat[["value"]]
これは、このインデックスがどのように動作するかの詳細については
myMat
A B C D
A 0 4 0 0
B 0 0 0 1
C 0 0 0 5
D 2 0 0 0
を返し、ヘルプファイル?"["
の行列と配列セクションを参照してください。そこの第4段落では、この形式の索引付けについて説明します。
最初の2つの変数は要素ではなく文字ベクトルであると仮定しています。これは、私がas.character
を強要するために使用する必要がないので、少し楽になります。
結果をdata.frameに変換するには、as.data.frame
に簡単にラップします。
データ
dat <-
structure(list(var1 = c("A", "C", "D", "B"), var2 = c("B", "D",
"A", "D"), value = c(4L, 5L, 2L, 1L)), .Names = c("var1", "var2",
"value"), class = "data.frame", row.names = c(NA, -4L))
出典
2017-10-04 11:52:02
lmo
あなたは試してみましたが、それらの多くの機能を投稿してください、それが – PoGibas
'XTABS(値〜VAR1 + VAR2、DF)'を動作しませんでしたなぜですか? – Sotos
@Sotosこれはカラム 'C'を見逃すでしょう – PoGibas