你的標題說,「矩陣」,但你的問題被標記data.frame
,所以這裏的做法假設你正在處理data.frame
S:
df1 <- data.frame(rn = c("man", "woman", "girl", "boy", "cat", "dog"),
Value = NA)
df2 <- data.frame(rn = c("woman", "dog"), V1 = c(3, 5))
df3 <- data.frame(rn = c("man", "woman", "cat"), V2 = c(4, 7, 6))
df4 <- data.frame(rn = c("boy", "cat", "dog"), V3 = c(17, 10, 1))
library(reshape2)
dcast(melt(mget(ls(pattern = "df\\d")), id.vars = "rn"),
rn ~ variable, value.var = "value")
# rn Value V1 V2 V3
# 1 boy NA NA NA 17
# 2 cat NA NA 6 10
# 3 dog NA 5 NA 1
# 4 girl NA NA NA NA
# 5 man NA NA 4 NA
# 6 woman NA 3 7 NA
的總體思路是使用mget
捕獲所有的list
中的相關對象(當然,您也可以手動執行此操作)。然後,使用list
方法melt
將所有內容組合爲「長」data.frame
。這可以很容易地使用dcast
重塑。
的方法是相似的(甚至更容易),如果你有矩陣:
m1 <- `rownames<-`(as.matrix(df1[-1]), df1[[1]])
m2 <- `rownames<-`(as.matrix(df2[-1]), df2[[1]])
m3 <- `rownames<-`(as.matrix(df3[-1]), df3[[1]])
m4 <- `rownames<-`(as.matrix(df4[-1]), df4[[1]])
dcast(melt(mget(ls(pattern = "m\\d"))), Var1 ~ Var2, value.var = "value")
# Var1 Value V1 V2 V3
# 1 man NA NA 4 NA
# 2 woman NA 3 7 NA
# 3 girl NA NA NA NA
# 4 boy NA NA NA 17
# 5 cat NA NA 6 10
# 6 dog NA 5 NA 1
謝謝!我甚至似乎理解它:)。 –