- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试最大化横截面面板数据中的数据点数量。我的矩阵结构如下,y 轴为年份,x 轴为国家/地区:
A B C D
2000 NA 50 NA 85
2001 110 75 76 86
2002 120 NA 78 87
2003 130 100 80 88
因此,我试图找到年度数据点的所有可能组合,以获得每个组合最多的国家/地区。使用上面的示例,我尝试生成向量、列表或其他类型的对象,类似于以下内容:
2000, 2001, 2002, 2003 = D
2000, 2001, 2003 = D and B
2001, 2002, 2003 = D, A and C
2000, 2001 = D and B
2001, 2002 = D, A and C
2002, 2003 = D, A and C
2000 = D and B
2001 = A, B, C and D
2002 = A, C and D
2003 = A, B, C and D
这是一件抽象的事情,我无法理解它。我将不胜感激任何帮助。
最佳答案
这是一个很好的起点,但可能还可以改进的解决方案:
library(RcppAlgos)
getCombs <- function(myMat, myCap = NULL, minYears = NULL) {
numRows <- nrow(myMat)
myColNames <- colnames(myMat)
if (is.null(minYears)) ## set default
repZero <- numRows - 1
else if (minYears >= numRows || minYears < 1) ## check for extreme cases
repZero <- numRows - 1
else
repZero <- numRows - minYears
combs <- comboGeneral(v = c(0,1:numRows),
m = numRows, freqs = c(repZero,
rep(1, numRows)), rowCap = myCap)
## I think this part could be improved
out <- lapply(1:nrow(combs), function(x) {
myRows <- myMat[combs[x,],]
if (is.null(nrow(myRows)))
result <- !is.na(myRows)
else
result <- complete.cases(t(myRows))
myColNames[result]
})
myRowNames <- rownames(myMat)
names(out) <- lapply(1:nrow(combs), function(x) myRowNames[combs[x,combs[x,]>0]])
out
}
这是 OP 示例的输出。 (OP 缺少以下 5 个结果):
testMat <- matrix(c(NA, 50, NA, 85, 110, 75, 76, 86, 120, NA, 78, 87, 130, 100, 80, 88), nrow = 4, byrow = TRUE)
row.names(testMat) <- 2000:2003
colnames(testMat) <- LETTERS[1:4]
getCombs(testMat)
$`2000`
[1] "B" "D"
$`2001`
[1] "A" "B" "C" "D"
$`2002`
[1] "A" "C" "D"
$`2003`
[1] "A" "B" "C" "D"
$`c(2000, 2001)`
[1] "B" "D"
$`c(2000, 2002)`
[1] "D"
$`c(2000, 2003)`
[1] "B" "D"
$`c(2001, 2002)`
[1] "A" "C" "D"
$`c(2001, 2003)`
[1] "A" "B" "C" "D"
$`c(2002, 2003)`
[1] "A" "C" "D"
$`c(2000, 2001, 2002)`
[1] "D"
$`c(2000, 2001, 2003)`
[1] "B" "D"
$`c(2000, 2002, 2003)`
[1] "D"
$`c(2001, 2002, 2003)`
[1] "A" "C" "D"
$`c(2000, 2001, 2002, 2003)`
[1] "D"
但是,这个答案或任何 future 的答案不会为您提供所有组合,因为您拥有 144 个国家/地区和 47 年的数据。这会产生一个非常非常的数字。任何长度不超过 n 的每个组合都相当于 power set 。幂集中的元素数量仅为2^n
。由于我们没有计算空集的等价物,因此我们需要减一,因此:
library(gmp)
sub.bigz(pow.bigz(2, 47),1)
Big Integer ('bigz') :
[1] 140737488355327
是的,超过一百万亿!!!您可能需要重新考虑您的方法,因为结果太多。
一切都还没有丢失!您可以使用 myCap
参数来限制结果的数量,以便您仍然可以研究可能的组合。观察:
set.seed(11111)
biggerTest <- matrix(sample(100, 20*20, replace = TRUE), nrow = 20)
library(countrycode)
colnames(biggerTest) <- LETTERS[1:20]
rownames(biggerTest) <- 1988:2007
## set 10% of values to NA
myNAs <- sample(400, 400 / 10)
biggerTest[myNAs] <- NA
biggerTest[1:6, 1:10]
A B C D E F G H I J
1988 51 71 79 35 22 33 22 84 68 4
1989 NA 51 73 10 48 NA 62 44 29 60
1990 NA 21 NA 44 91 24 45 62 52 18
1991 91 91 58 79 65 34 36 87 54 32
1992 82 6 74 75 99 NA 20 28 64 30
1993 80 10 43 100 24 22 99 28 22 44
## Getting all 1,048,575 results takes a good bit of time
system.time(allResults <- getCombs(biggerTest))
user system elapsed
49.449 0.726 50.191
## Using myCap greatly reduces the amount of time
system.time(smallSampTest <- getCombs(biggerTest, myCap = 10000))
user system elapsed
0.252 0.003 0.257
或者,您可以使用 minYears
参数仅返回具有最少年份组合数的结果。例如,根据 OP 对 @CPak 答案的评论,如果您只想查看 15 年或以上组合的结果,我们有:
system.time(minYearTest <- getCombs(biggerTest, minYears = 15))
user system elapsed
1.408 0.018 1.428
set.seed(123)
minYearTest[sample(length(minYearTest), 5)]
$`c(1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2004, 2005, 2007)`
[1] "C" "E" "G" "T"
$`c(1988, 1989, 1990, 1991, 1993, 1994, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2007)`
[1] "G" "I" "T"
$`c(1988, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000, 2001, 2003, 2004, 2005, 2007)`
[1] "D" "G" "K" "M" "T"
$`c(1988, 1990, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2002, 2003, 2004, 2005, 2006, 2007)`
[1] "G" "J" "K" "T"
$`c(1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2003, 2004, 2005, 2006, 2007)`
[1] "E" "G" "T"
或者同时使用两个参数:
system.time(bothConstraintsTest <- getCombs(biggerTest, 10000, minYears = 10))
user system elapsed
0.487 0.004 0.494
bothConstraintsTest[1:5]
$`c("1988", "1989", "1990", "1991", "1992", "1993", "1994", "1995", "1996", "1997")`
[1] "E" "G" "H" "J" "M" "R" "T"
$`c("1988", "1989", "1990", "1991", "1992", "1993", "1994", "1995", "1996", "1998")`
[1] "E" "G" "H" "J" "T"
$`c("1988", "1989", "1990", "1991", "1992", "1993", "1994", "1995", "1996", "1999")`
[1] "D" "E" "G" "M" "T"
$`c("1988", "1989", "1990", "1991", "1992", "1993", "1994", "1995", "1996", "2000")`
[1] "D" "G" "J" "M" "R" "T"
$`c("1988", "1989", "1990", "1991", "1992", "1993", "1994", "1995", "1996", "2001")`
[1] "D" "E" "G" "H" "J" "M" "R" "T"
我们需要做的第一件事是确定n年的每一个组合。这归结为查找 multiset 的所有 n 元组。 c(rep(0, n-1), 1:n)
或等价地,n 元素集的幂集减去空集。例如,对于 2000:2003
年(4 年跨度),可能的组合由下式给出:
comboGeneral(v = c(0,1:4), m = 4,
freqs = c(3, rep(1, 4)))
[,1] [,2] [,3] [,4]
[1,] 0 0 0 1
[2,] 0 0 0 2
[3,] 0 0 0 3
[4,] 0 0 0 4
[5,] 0 0 1 2
[6,] 0 0 1 3
[7,] 0 0 1 4
[8,] 0 0 2 3
[9,] 0 0 2 4
[10,] 0 0 3 4
[11,] 0 1 2 3
[12,] 0 1 2 4
[13,] 0 1 3 4
[14,] 0 2 3 4
[15,] 1 2 3 4
现在,我们迭代组合的每一行,其中每一行告诉我们原始矩阵中的哪些行组合要测试 NA
。如果特定组合仅包含一个结果,我们将确定哪些索引不NA
。这可以通过 !is.na(
轻松实现。如果我们有多于一行,我们使用 complete.cases(t
来获取仅包含数字的列 (即没有出现 NA
)。
此后,我们只需使用索引来获取结果的名称,瞧,我们就得到了想要的结果。
关于r - 估计 r 中面板数据的组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49200510/
我想计算或至少估计放置在相机/kinect 前面的物体的体积。知道我应该从哪里开始吗?你推荐 OpenCV 吗?您是否推荐任何其他技术,例如声纳/激光? 最佳答案 一直在用 OpenCV 2.3 编写
我想知道 MySQL 对表中总行数的 TABLE_ROWS 估计值是否有限制或保证误差范围? 最佳答案 如果它与 SHOW TABLE STATUS 发出的数字类似,则至少会偏差 +/- 40%,有时
我们都曾 mock 过“还剩 X 分钟”的对话框,它似乎过于简单,但我们如何改进它呢? 实际上,输入是截至当前时间的一组下载速度,我们需要使用它来估计完成时间,也许带有确定性指示,例如使用一些 Y%
我们都曾 mock 过“还剩 X 分钟”的对话框,它似乎过于简单,但我们如何改进它呢? 实际上,输入是截至当前时间的一组下载速度,我们需要使用它来估计完成时间,也许带有确定性指示,例如使用一些 Y%
我的理解是 glmnet 采用矩阵,其中每一列都是一个解释变量。 我有一个包含约 10 个解释变量的数据框(其中一些是因子) 我怎样才能使用诸如 y~(x1*x2*x3)+(x4*x5)+x6 之类的
有没有办法估计运行 R 的时间?命令而不实际运行它或仅部分运行命令? 我知道 system.time()存在但需要运行整个命令然后它给出了花费的时间。 最佳答案 还有http://www.ats.uc
在尝试使用 libGD 在 PHP 中调整图像大小之前,我想检查是否有足够的内存来执行操作,因为“内存不足”会完全杀死 PHP 进程并且无法被捕获。 我的想法是,原始图像和新图像中的每个像素 (RGB
我有一些 VHDL 文件,我可以在 Debian 上用 ghdl 编译它们。一些人已将相同的文件改编为 ASIC 实现。算法有一个“大面积”实现和一个“紧凑”实现。我想编写更多实现,但要评估它们,我需
我在 Amazon EC2 上使用 RStudio 0.97.320 (R 2.15.3)。我的数据框有 20 万行和 12 列。 我正在尝试使用大约 1500 个参数来拟合逻辑回归。 R 使用 7%
我目前正在估算一个新项目。假设只有一名开发人员在处理它,我的高水平估计是 25 周。 实际上会有两个开发人员并行工作。减少估计的什么因素是合理的? (我意识到不会是0.5) 最佳答案 根据原始开发人员
我试图更好地理解创建 Postgres 索引所涉及的权衡。作为其中的一部分,我很想了解通常使用多少空间索引。我已通读 the docs ,但找不到这方面的任何信息。我一直在做自己的小实验来创建表和索引
我对 Azure 平台相当陌生,需要一些有关 Azure 搜索服务成本估算的帮助。每个月我们都会有大约 500GB 的文件被放入 Azure Blob 存储中。我们希望仅根据文件名使用 Azure 搜
我正在尝试最大化横截面面板数据中的数据点数量。我的矩阵结构如下,y 轴为年份,x 轴为国家/地区: A B C D 2000 NA 50 NA
如果我有两个时间序列,例如: t f1 #[1] 0.25 #> f2 #[1] 0.25 f phase_difference #[1] 0.5 这意味着时间序列相移 pi/2,因为它们应该根据
我对 Azure 平台相当陌生,需要一些有关 Azure 搜索服务成本估算的帮助。每个月我们都会有大约 500GB 的文件被放入 Azure Blob 存储中。我们希望仅根据文件名使用 Azure 搜
我使用了以下 R 包:mice、mitools 和 pROC。 基本设计:3 个预测变量度量,在 n~1,000 的数据缺失率在 5% 到 70% 之间。 1 个二进制目标结果变量。 分析目标:确定
如何使用 lsmeans 来估计两个成对对比的差异?例如——想象一个连续的 dv 和两个因子预测变量 library(lsmeans) library(tidyverse) dat % fac
我制作了一个使用 BigDecimal 的科学计算器。它有一个特别消耗资源的功能:阶乘。现在,输入任何数字都会启动计算。根据运行此代码的设备,答案会在不同的时间显示。输入像 50000 这样的巨大值!
我已经发出了 sympy 命令来求解某个方程或另一个方程。现在已经好几天了,我不知道什么时候能完成。 我可以使用 sympy 来记录调用 .solvers.solve 的进度吗?如果不是,我如何估计
最近我得到了一些 error C6020: Constant register limit exceeded at variable; more than 1024 registers needed
我是一名优秀的程序员,十分优秀!