から列/行名の一致を使用して置き換える:条件Iは、2つのデータフレームを有する他のデータフレーム
id <- c("a", "b", "c")
a <- 0
b <- 0
c <- 0
df1 <- data.frame(id, a, b, c)
id a b c
1 a 0 0 0
2 b 0 0 0
3 c 0 0 0
num <- c("a", "c", "c")
partner <- c("b", "b", "a")
value <- c("10", "20", "30")
df2 <- data.frame(num, partner, value)
num partner value
1 a b 10
2 c b 20
3 c a 30
私はすべてのインスタンスdf1$id==df2$num & colnames(df1)==df2$partner
にdf2$value
でdf1
にゼロを交換したいです。だから、出力は次のようになります。私は次のように個々のセルを置き換えることができます
a <- c(0, 0, 30)
b <- c(10, 0, 20)
c <- c(0, 0, 0)
df.nice <- data.frame(id, a, b, c)
id a b c
1 a 0 10 0
2 b 0 0 0
3 c 30 20 0
:
df1$b[df1$id=="a"] <- ifelse(df2$num=="a" & df2$partner=="b", df2$value, 0)
が、私は大規模なデータフレームのためのすべての可能なdf1
の行/列の組み合わせを循環する必要があります。私はこれがプライマリとマッチを伴うと思われますが、どのように判断するのか分かりません。
Updateへ@MikeH。
おかげで、私は形を整え使用になってきました。
df.nice <- melt(df2, id=c("num", "partner"))
df.nice <- dcast(test.nice, num ~ partner, value.var="value")
がこれを生成するために:これが動作しているようです
num a b
1 a <NA> 10
2 c 30 20
すべてのゼロとして表現し、私は、しかし、すべての可能な行/列の組み合わせが必要です。別のデータフレーム(例:df1)から行と列を取得するように再構成を依頼する方法がありますか、再形成した後でバインドする必要がありますか?
'rowname(DF1)'? – PoGibas
あなたは本当に置き換えが必要ですか、実際には 'df2'を' df.nice'のフォーマットに再構成しようとしていますか? –
@Mike H. reshapeは、可能なすべての行/列の組み合わせが含まれている場合に機能します。今すぐ試してみてください、 – hoho