0
私はdata.frame
に2つの列を持っています。 1つはオブジェクトを示し、もう1つはオブジェクトがあるグループ内にあるかどうかを示します。ループを作成せずに隣接行列を作成するにはどうすればよいですか?バイナリ変数に基づいて隣接行列を作成する
data("mtcars")
testdf <- data.frame(names=as.character(row.names(mtcars)[1:5]),
ingroup=0)
set.seed(123)
testdf$ingroup[testdf$names%in%row.names(mtcars)[sample(length(row.names(mtcars)[1:5]), 2)]] <- 1
testdf
names ingroup
1 Mazda RX4 0
2 Mazda RX4 Wag 1
3 Datsun 710 0
4 Hornet 4 Drive 1
5 Hornet Sportabout 0
EDIT:オブジェクトは、特定のグループ内にある場合、所望の出力を示す行列であるべきである。
data.frame(x1=c(0,0,0,0,0),
x2=c(0,1,0,0,1),
x3=c(0,0,0,0,0),
x4=c(0,0,0,0,0),
x5=c(0,1,0,0,1))
colnames(output) <- c("Datsun 710", "Hornet 4 Drive", "Hornet Sportabout", "Mazda RX4","Mazda RX4 Wag")
rownames(output) <- c("Datsun 710", "Hornet 4 Drive", "Hornet Sportabout", "Mazda RX4","Mazda RX4 Wag")
output
Datsun 710 Hornet 4 Drive Hornet Sportabout Mazda RX4 Mazda RX4 Wag
Datsun 710 0 0 0 0 0
Hornet 4 Drive 0 1 0 0 1
Hornet Sportabout 0 0 0 0 0
Mazda RX4 0 0 0 0 0
Mazda RX4 Wag 0 1 0 0 1
おかげで、トーマス
私の解決策が期待される出力を与えていないと言った理由がわかりません。あなたの例と期待された結果によると、それは同じものを与えています – akrun
私は避けようとしたのと同じ間違いをしました。ごめんなさい。 'testdf'で見ることができるように、Datsun710は' 1'を得るべきではありません。 'tcrossprod(tbl)'を使うことで、私が欲しいものの正反対を得ることができます。 'tcrossprod(tbl [、2])を使うことで、私は自分が望むものを得ることができます。右?混乱させて申し訳ありません。 – Thomas