R 如何基于向量填充数据帧
我有以下数据。frameR 如何基于向量填充数据帧,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表示列标题和行
数据
:
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)