R 如何基于向量填充数据帧

R 如何基于向量填充数据帧,r,if-statement,vector,R,If Statement,Vector,我有以下数据。frame数据: data <- data.frame(matrix(0, ncol=4, nrow=4)) colnames <- seq(from = 6, to = 3, by = -1) names(data)<- sprintf("%.1f", colnames) rownames <- seq(from=5, to=2, by=-1) rownames(data) <- sprintf("%.0f", rownames) a表示列标题和行

我有以下数据。frame
数据

data <- data.frame(matrix(0, ncol=4, nrow=4))
colnames <- seq(from = 6, to = 3, by = -1)
names(data)<- sprintf("%.1f", colnames)
rownames <- seq(from=5, to=2, by=-1)
rownames(data) <- sprintf("%.0f", rownames)
a
表示列标题和行标题可以采用的所有可能的总和。例如,最西北的单元格是
6+5=11

b
表示要填充到data.frame中的值。该顺序对应于
a
的顺序。例如,
数据[1,1]
(行名和列名之和为
11
)的值应为
0
<代码>数据[1,2]和
数据[2,1]
都应该具有值
5

我该怎么做呢

我最初的想法是在所有单元格中循环,检查它们的行+列名称和是什么,然后检查这个和是否在a中,如果在a中,抓取位置,然后转到b,根据位置抓取值,然后填入。这是否在正确的轨道上?

因此(未经测试),也许以下方法可行

output <- outer(X=a, Y=b, FUN="+")
output尝试以下方法:

g <- outer(as.numeric(colnames(data)), as.numeric(rownames(data)), "+")

g <- matrix(sapply(1:length(g), function(x) b[which(a==g[x])]), nrow=4)
#     [,1] [,2] [,3] [,4]
#[1,]    0    5   10   15
#[2,]    5   10   15   20
#[3,]   10   15   20   25
#[4,]   15   20   25   30

#For a data frame:
g<- data.frame(g, row.names=rownames(data)); names(g) <- colnames(data)

g我不知道为什么在这个例子中,你想要一个data.frame而不是一个矩阵。这样做似乎没有任何好处。对于您的问题,我建议查看“outer”函数。我不确定这是几分钟后发布的公认解决方案的核心,为什么会被否决。
g <- outer(as.numeric(colnames(data)), as.numeric(rownames(data)), "+")

g <- matrix(sapply(1:length(g), function(x) b[which(a==g[x])]), nrow=4)
#     [,1] [,2] [,3] [,4]
#[1,]    0    5   10   15
#[2,]    5   10   15   20
#[3,]   10   15   20   25
#[4,]   15   20   25   30

#For a data frame:
g<- data.frame(g, row.names=rownames(data)); names(g) <- colnames(data)