如何根据向量填充数据框

时间:2015-04-18 21:40:15

标签: r if-statement vector

我有以下data.frame data

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)

我有两个向量,ab

a <- seq(11, 5, -1)
b <- seq(0, 30, 5)

a表示列和行标题可以采用的所有可能的总和。例如,最西北的单元格为6+5=11

b表示我想要填充到data.frame中的值。订单对应于a的顺序。例如,data[1,1](行和列名称总和为11)应采用值0data[1,2]data[2,1]都应该使用值5

我将如何做到这一点?

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

2 个答案:

答案 0 :(得分:1)

试试这个:

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)

答案 1 :(得分:-1)

所以(未经测试),也许以下内容可行。

output <- outer(X=a, Y=b, FUN="+")

这将创建一个数组/矩阵。当然,如果需要,可以强制使用data.frame,但我不确定为什么你会在上面的例子中这样做。