【发布时间】:2020-01-22 13:36:27
【问题描述】:
我正在使用国家之间的贸易数据,并希望为每个交易的物品创建一个国家/地区矩阵。像这样的问题之前在这里被问过,我正在使用 persons 示例数据,它没有得到回答,我的问题是不同的,因为我不需要这样做多年。 数据
usage <- data.frame(RC=c("DE", "IT", "USA","BRA", "ARG"),
Value=c(3,2,4,77,9,2,6,7,5,4),
Item = rep(c("Almonds", "Apples"), each=5))
import<- data.frame(RC=c("DE", "IT", "USA"),
PC = c("BRA", "ARG"),
Item = c("Almonds", "Apples"),
Value = c(1,5,3,2,8,3))
因此,我需要为不同的产品最终得到大约 450 个相同的矩阵,但所有这些矩阵都包含在同一个矩阵中,所有国家都包括在内(因此,不交易产品的国家应该包含在该产品矩阵中的值为零)。最后,我还想用各国的使用数据填充这些矩阵的对角线。我不知道这是否过于复杂,但我希望它可能。不幸的是,我的代码不起作用.....
我们将不胜感激任何正确方向的帮助。
编辑:由@user2474226 解决。在制作矩阵之前,我通过添加使用数据作为交易数据来填充对角线。
最终代码
usage$PC <- usage$RC #Duplicating the country column of usage
import2 <- rbind(import, usage) # adding the usage data to the trade data
import_YI <- split(import2, list(import2$Item))
trade_matrices <-lapply(import_YI, function(d) {
x <- with(d, tapply(Value, list(RC, PC), sum));
x[is.na(x)] <- 0;
x <- as.matrix(x);
un1 <- unique(sort(c(colnames(x), rownames(x))));
m2 <- matrix(0, NROW(un1), NROW(un1), dimnames = list(un1, un1));
m2[rownames(x), colnames(x)] <- x;
m2
}
)
非常感谢@user2474226,我学到了很多东西,解决方案也很有帮助。第一次在这里问,没想到这么快的解决方案! Desired Output matrix per product
【问题讨论】:
-
对于上面的例子,你想要的输出是什么样的?还有
acast是什么?
标签: r loops dataframe matrix extract