2

次のようなデータフレームを作成したいと思います。

Label   Jim Charles Kevin Alan
Charles 0   1       0     0  
Kevin   0   0       1     0
Alan    0   0       0     1
Alan    0   0       0     1
Jim     1   0       0     0

列名が設定され、最初の列に人の名前がリストされているデータフレームから始めていますが、すべての数字が0です。リストされている名前を一致させることで、それらの一部をすばやく1に設定できるようにしたい最初の列を列名に。

4

2 に答える 2

3

より速い方法があるかもしれませんが、これはかなりうまくいくはずです:

データ:

m <- matrix(0,nrow=5,ncol=4,
            dimnames=list(c("Charles","Kevin","Alan","Alan","Jim"),
            c("Jim","Charles","Kevin","Alan")))

outerすべての行をすべての列と比較するために使用します。

mm <- outer(rownames(m),colnames(m),"==")
storage.mode(mm) <- "numeric" ## because as.numeric() loses matrix dimensions
dimnames(mm) <- dimnames(m)   ## reset row/column names
于 2012-07-27T19:53:23.627 に答える
2

ベンの答えと同様に、データが data.frame と呼ばれる場合df

df <- structure(list(Label = c("Charles", "Kevin", "Alan", "Alan", 
"Jim"), Jim = c(0, 0, 0, 0, 0), Charles = c(0, 0, 0, 0, 0), Kevin = c(0, 
0, 0, 0, 0), Alan = c(0, 0, 0, 0, 0)), .Names = c("Label", "Jim", 
"Charles", "Kevin", "Alan"), row.names = c(NA, -5L), class = "data.frame")

df[outer(df$Label, names(df), '==')] <- 1
于 2012-07-27T19:56:01.997 に答える