- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含大约 20 个数字列的数据框,每个列都包含大量的 NA 值。我想选择这些列的一个子集,这些列将为我提供包含零 NA 值的最多行。穷举搜索将花费大量计算时间——有没有更好的方法来获得近似值?
这是一个较小数据框的示例(完全任意):
set.seed(2)
foo = as.data.frame(matrix(rnorm(200), nr = 20))
foo[sapply(foo, function(x) x > abs(x[1]))] = NA
foo = foo[-1, ]
round(foo, 3)
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
2 0.185 -1.200 -1.959 NA -1.696 0.261 0.139 0.410 -0.638 -1.262
3 NA 1.590 -0.842 -0.703 -0.533 -0.314 NA -0.807 -0.268 0.392
4 -1.130 1.955 NA 0.158 -1.372 -0.750 -0.431 0.086 0.360 -1.131
5 -0.080 0.005 NA 0.506 -2.208 -0.862 -1.044 NA -1.313 0.544
6 0.132 -2.452 NA -0.820 NA NA 0.538 -0.654 -0.884 NA
7 0.708 0.477 -0.305 -1.999 -0.653 0.940 -0.670 NA NA 0.025
8 -0.240 -0.597 -0.091 -0.479 -0.285 NA 0.639 0.550 -2.099 0.515
9 NA 0.792 -0.184 0.084 -0.387 -0.421 -1.724 -0.807 -1.239 -0.654
10 -0.139 0.290 -1.199 -0.895 0.387 -0.351 -1.742 -0.997 NA 0.504
11 0.418 0.739 -0.838 -0.921 NA -1.027 0.690 NA NA -1.272
12 NA 0.319 NA 0.330 NA -0.251 0.331 -0.169 NA -0.077
13 -0.393 1.076 -0.562 -0.142 -1.184 0.472 0.871 NA 0.057 -1.345
14 -1.040 -0.284 NA 0.435 -1.358 NA -2.016 -0.844 0.324 -0.266
15 NA -0.777 -1.048 -0.054 -1.513 0.564 1.213 NA -0.905 NA
16 -2.311 -0.596 -1.966 -0.907 -1.253 0.456 1.200 -1.343 -0.652 0.701
17 0.879 -1.726 -0.323 1.304 NA NA 1.032 NA -0.262 -0.443
18 0.036 -0.903 NA 0.772 0.008 NA 0.786 0.464 -0.935 -0.789
19 NA -0.559 NA 1.053 -0.843 0.107 NA 0.268 NA -0.857
20 0.432 -0.247 NA -1.410 -0.601 -0.783 -1.454 NA -1.624 -0.746
dim(na.omit(foo))
[1] 1 10
以下是我制定详尽搜索的方式:
best.list = list()
for (i in 5:ncol(foo)) {
# get best subset for each size
collist = combn(ncol(foo), i)
numobs = apply(collist, 2, function(x) nrow(na.omit(foo[, x])))
cat("for subset size", i, "most complete obs is", max(numobs), "\n")
best = which(numobs == max(numobs))[1]
best.list = c(best.list, list(collist[, best]))
}
例如,best.list[[1]]
告诉我,如果我保留 5 列,我可以获得 12 个完整的观察结果(NA 为零的行),并且第 1、2、4 列、 7 和 10 是我应该选择的。
虽然这适用于非常小的数据框,但它很快就会变得无法处理较大的数据框。 R 中有没有一种方法可以有效地估计给定大小的最佳子集?我唯一能找到的是 subselect
包,但我不知道如何针对手头的问题实现它的方法。
最佳答案
不确定这是否是完整的解决方案,但如果您想要快速的结果,data.table 和影子矩阵是最可能的组成部分。
library(data.table)
df = data.table(foo) # your foo dataframe, converted to data.table
y = sort(df[,lapply(.SD, function(x) sum(is.na(x)))]) # nr of NA in columns, increasing
setcolorder(df, names(y)) # now the columns are ordered - less NA first
df[, idx := rowSums(is.na(df))] # count nr of NA in rows
df = df[order(idx),] # sort by nr of NA in rows
df[, idx := NULL] # idx not needed anymore
# now your data.table is sorted: columns with least NA to the left,
# rows with with least NA on top
# shadow matrix
x= data.table(abs(!is.na(df))) # 0 = NA value
y = as.data.table(t(x))
y = y[,lapply(.SD, cumprod)]
y = as.data.table(t(y))
y[,lapply(.SD, sum)]
# nr of complete cases from column selections:
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
# 1: 19 18 16 14 11 10 7 5 2 1
关于r - data.frame 列的子集以最大化 "complete"观察,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24016612/
我有一个返回 future 的函数,该函数取决于要解决的回调结果: Future connectSocket(String email, String password, {Function o
我正在尝试链接两个返回 Completable 的响应式调用在 android 上使用改造: val userRequest = ... val languageRequest = ... retur
我正在尝试将一些数据保存在数据库中。对于添加方法,我使用 Completable。在我保存一个实体 - 客户之后,我想保存一个天数列表,但只有在客户被保存之后。这是我现在的代码。 mDatabaseM
我是 RxJava 的新手,遇到了以下问题: 我有两个 Completable 对象来存储一些数据。我想触发第一个,然后仅在第一个成功完成后才启动第二个。对第二个 Completable 的调用应该被
我正在尝试从两个不同的文件中读取数据,一个是 csv 格式,另一个文件是 xml 数据。使用completeFuture 我正在尝试从两个文件异步读取数据。我收到类型转换错误。请让我知道我是否遵循正确
我有以下人员类别: class Person { String name; String city; public void setInfo(PersonInformation
我正在尝试这个: var notifications = $( "#notifications" ); notifications.fadeOut("slow") .complete(func
我发现 Bash shell 支持一种不同于“传统”自动完成的自动完成类型,所有可能性都列在下一行。 使用“传统的”自动完成,如果我键入 ch 然后按 Tab 键,我会得到如下信息: $ ch cha
我是 rxjava/rxkotlin/rxandroid 的初学者。 我需要按顺序处理三个不同的异步调用。问题是第一步返回 Single ,第二个Completable第三个又是Completable
默认情况下,在 TextMate 中按 Esc 会循环执行可能的补全(除了关闭对话框之外),这可能会在文档中放入不需要的字符,特别是如果您习惯于在大多数文本编辑器中使用 Esc 作为安全键的话。 (事
我知道 pull complete 在之后到达 download complete 在生命周期中,但我有兴趣了解它们之间的区别。我尝试在互联网上搜索,但找不到任何清楚解释这些差异的内容。 最佳答案 拉
以下代码似乎永远不会工作,因为组似乎没有终止,并且 takeLast() 不知道最后是什么: observableSequence .groupBy { $0.key } .map { gro
我是 ido-mode 的忠实粉丝,以至于我想用它来做 describe-function 之类的事情或 find-tag等等,而无需编写类似“我可以在 Emacs 中搜索标签的 ido-mode-s
我们什么时候应该使用 Completable.fromAction()我们什么时候应该使用 Completable.fromCallable()是否有特定的用例 从文档看来,两者都做同样的事情,很难注
我有以下gulpfile.js,我通过命令行执行gulp消息: var gulp = require('gulp'); gulp.task('message', function() { cons
我在我的 .vimrc 文件中设置了 omnifuc : setlocal omnifunc = javacomplete#complete 然后当我编辑任何文件时出现异常: E518: Unknow
我如何将 Single 链接到 Completable,以便在 Completable 完成时订阅它? repository.downloadUser() 是 Single。 根据调试,似乎此方法中的
在bash中,默认情况下,按Tab键将显示当前目录中的所有文件和目录。例如:。Cat a将显示类似aFile.txt apples.png aDirectory/的内容。如果您随后完成了a目录,它将显
在bash中,默认情况下,按Tab键将显示当前目录中的所有文件和目录。例如:。Cat a将显示类似aFile.txt apples.png aDirectory/的内容。如果您随后完成了a目录,它将显
我错过了什么?示例使用 min.js。 bundle.min.js 有更多代码,但我找不到该额外代码的描述...... https://getbootstrap.com/docs/4.0/gettin
我是一名优秀的程序员,十分优秀!