【发布时间】:2023-03-04 04:02:01
【问题描述】:
我有一个类似的数据框
X Y VALUE
"AAA" "BBB"
"CCC" "AAA"
我也有一个矩阵:
AAA BBB CCC
AAA 1 13 2
BBB 27 11 4
CCC 6 12 3
以 AAA、BBB 和 CCC 作为列名和行名。如何使用矩阵中的值填充数据框中的 VALUE 列?
【问题讨论】:
标签: r
我有一个类似的数据框
X Y VALUE
"AAA" "BBB"
"CCC" "AAA"
我也有一个矩阵:
AAA BBB CCC
AAA 1 13 2
BBB 27 11 4
CCC 6 12 3
以 AAA、BBB 和 CCC 作为列名和行名。如何使用矩阵中的值填充数据框中的 VALUE 列?
【问题讨论】:
标签: r
你可以的
df$VALUE <- mat[cbind(df$X, df$Y)]
使用您的示例:
df <- data.frame(X = c("AAA", "CCC"),
Y = c("BBB", "AAA"), stringsAsFactors = FALSE)
df
# X Y
# 1 AAA BBB
# 2 CCC AAA
mat <- matrix(c(1, 27, 6, 13, 11, 12, 2, 4, 3),
nrow = 3, ncol = 3,
dim = list(c("AAA", "BBB", "CCC"),
c("AAA", "BBB", "CCC")))
mat
# AAA BBB CCC
# AAA 1 13 2
# BBB 27 11 4
# CCC 6 12 3
df$VALUE <- mat[cbind(df$X, df$Y)]
df
# X Y VALUE
# 1 AAA BBB 13
# 2 CCC AAA 6
【讨论】:
class(m3$X) 来检查。
mat[cbind(as.character(m3$X), as.character(m3$Y))],或者考虑从 data.frame 中删除因子。
你也可以直接用melt从矩阵中获取数据框:
library(reshape2)
melt(mat)
【讨论】: