- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有 dim 的 data.frame:160560 x 171。有很多数据,但几乎 90% 都是 NA。
我愿意使用的算法(我们称之为 ALG)不允许 data.frame 中有任何 NA。我的想法是找到这个 data.frame 的最佳子集并在其上使用 ALG。
当我说子集时,我在想什么? data.frame(有 171 列)的 n 列(n<171)子集,不包含任何 NA(所有行都已满)。
当我说最好的时候,我在想什么?该子集可能拥有的行数最多。 F.e.如果我有两个 20 列的子集,第一个有 1152 行,第二个有 2254 行,我选择第二个。
问题是简单的组合在那里不起作用,因为 combn(1:171,20) 的结果超过 5*10^25。
R 中是否有任何库可以帮助我处理这个问题?
最佳答案
这是使用 crossprod
实现的一种方法.对于给定的列数,这将为您提供具有最大非 NA 行数的列。没有办法绕过它,您必须选择多个列才能获得。否则,您最终总是会选择 NA 最少的一列
首先,让我们为这个例子创建一个初始矩阵。此时它必须是一个矩阵。使用,as.matrix
根据需要在您的数据上。
set.seed(2)
x <- runif(150)
x[sample(1:150, 15, replace = FALSE)] <- NA
x <- matrix(x,ncol=10)
round(x,1)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 0.2 0.9 0.0 0.8 0.8 0.8 1.0 0.6 0.0 0.7
[2,] 0.7 1.0 0.2 1.0 0.9 0.3 0.4 0.9 0.2 0.5
[3,] 0.6 0.2 0.8 0.3 0.6 0.9 0.4 0.5 NA 0.8
[4,] 0.2 0.4 0.9 0.5 0.3 0.4 0.6 0.1 0.9 0.2
[5,] 0.9 0.1 0.5 0.8 0.9 0.6 0.5 0.1 0.2 0.4
[6,] 0.9 0.7 0.6 0.0 0.4 0.4 0.2 0.0 0.8 0.2
[7,] NA 0.4 0.8 0.0 0.4 0.7 0.4 0.7 0.6 0.3
[8,] 0.8 0.8 0.3 0.7 0.5 0.0 0.1 0.4 0.3 0.6
[9,] 0.5 0.2 0.7 NA 0.2 0.4 0.1 NA 0.7 0.3
[10,] 0.5 NA 0.2 0.3 0.1 0.2 0.4 0.8 0.3 NA
[11,] 0.6 0.5 NA 0.8 0.3 0.9 0.2 0.8 0.2 0.7
[12,] NA 0.1 NA 0.8 0.3 1.0 0.4 0.9 NA 0.7
[13,] 0.8 NA 0.1 NA 0.0 0.3 1.0 NA 0.0 0.3
[14,] 0.2 1.0 0.2 0.6 0.2 0.7 NA 1.0 NA 0.5
[15,] 0.4 0.1 0.9 0.7 0.2 0.3 0.3 0.6 0.3 0.3
如您所见,第 5 列和第 6 列没有 NA
现在,让我们创建一个类似的矩阵,其中 NA 为 0,非 NA 为 1。
is_na_vector<- ifelse(is.na(x),0,1)
之后,让我们计算crossproduct
:
crossprod_vector <- crossprod(is_na_vector)
colSums(crossprod_vector)
[1] 119 120 119 120 135 135 127 120 111 127
可以看到,第 5 列和第 6 列的 colSums
最高.这意味着,结合其他变量,它们具有最少数量的 NA
然后我们使用该 colSums 向量来选择多个列。这将对所有列进行排名并给出 n
第一的。这是具有最大非 NA 行数的三列。在本例中为 14 行。此时可能会有联系,但当您选择 20 列时应该不会有问题。
n <- 3
x_df <- as.data.frame(x) #to get meaningful colnames
res <- x_df[,rank(-colSums(crossprod_vector),ties.method ="first")<=n ] #use "-" to get decreasing rank
res
V5 V6 V7
1 0.7700279 0.7554624 0.9767552
2 0.8869842 0.2880597 0.3970164
3 0.6251217 0.8678447 0.3799989
4 0.2603000 0.4026427 0.5603876
5 0.8590731 0.5726850 0.4638082
6 0.4374880 0.3506426 0.1967768
7 0.3881448 0.6719989 0.4269434
8 0.4615011 0.0250504 0.0930252
9 0.2186752 0.4011010 0.1153091
10 0.0659355 0.1999765 0.4400317
11 0.2757010 0.8565250 0.2009347
12 0.3103811 0.9715154 0.4276391
13 0.0421755 0.3237224 0.9806000
14 0.1846735 0.7331914 NA
15 0.1833732 0.3400682 0.2869739
使用 na.omit
获取非 NA 行:
na.omit(res)
V5 V6 V7
1 0.7700279 0.7554624 0.9767552
2 0.8869842 0.2880597 0.3970164
3 0.6251217 0.8678447 0.3799989
4 0.2603000 0.4026427 0.5603876
5 0.8590731 0.5726850 0.4638082
6 0.4374880 0.3506426 0.1967768
7 0.3881448 0.6719989 0.4269434
8 0.4615011 0.0250504 0.0930252
9 0.2186752 0.4011010 0.1153091
10 0.0659355 0.1999765 0.4400317
11 0.2757010 0.8565250 0.2009347
12 0.3103811 0.9715154 0.4276391
13 0.0421755 0.3237224 0.9806000
15 0.1833732 0.3400682 0.2869739
您可以看到使用 nrow
得到了多少非 NA 行:
nrow(na.omit(res)) #14
对于 n <- 5
,我得到 12 个非 NA 行
关于r - 没有 NA 的 data.frame 的最佳可能子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42858959/
只是想知道这些结构之间有什么区别(text、data、rodata、bss 等)在链接描述文件中: .data : { *(.data) } .data : { *(.data*) }
Data 定义为其核心功能之一 gfoldl : gfoldl :: (Data a) => (forall d b. Data d => c (d -> b) -> d -> c b)
以下之间有什么区别:data-sly-use、data-sly-resource、data-sly-include 和 数据-sly-模板?我正在阅读 Sightly AEM 上的文档,我非常困惑。
我有一个 Spring Boot、Spring Data JPA (hibernate) Web 应用程序,并且想引入文本搜索功能。 我理解以下内容 hibernate search 或 spring
我不知道我的代码有什么问题。我读了其他有同样问题的人的一些问题,但没有找到答案。当我尝试编译时出现以下错误: ||In function 'main':| |35|error: expected ex
我不太确定为什么会收到此错误或其含义。我的数据框称为“数据”。 library(dplyr) data %>% filter(Info==1, Male==1) %>% lm(CFL_
我一直在 GitHub 等更现代的网站上看到这些属性,它们似乎总是与自定义的弹出窗口一致,如 title 属性。 Option 1 Option 2 Option 3 Option 4 我在 HTML
如何用 iCloud Core Data 替换我现有的 Core Data?这是我的持久商店协调员: lazy var persistentStoreCoordinator: NSPersistent
我一直在 GitHub 等更现代的网站上看到这些属性,它们似乎总是与自定义的弹出窗口一致,如 title 属性。 Option 1 Option 2 Option 3 Option 4 我在 HTML
我正在通过 this project 在 Android 上摆弄 node.js ,我需要一种方法将 js 文件部署到私有(private)目录(以隐藏源代码,防止用户篡改),该目录也物理存在于文件系
大家好我有点沮丧,所以我希望得到一些帮助。我的项目在 SwiftUI 中。我想使用图像选择器将图像保存到 Core Data。我实现了让 ImagePicker 工作,但我正在努力转换 Image -
我有以下数据和代码: mydf grp categ condition value 1 A X P 2 2 B X P 5
我一直在努力解决这个问题,但我根本找不到任何解决问题的方法。希望这里有人可以提供帮助。 我正在尝试为具有以下结构的某些数据创建个人选择矩阵: # A tibble: 2,152 x 32 a
我了解 Data.Map.Lazy 和 Data.Map.Strict 是不同的。但是,当您导入 Data.Map 时,您究竟导入了什么:严格的、惰性的还是两者的组合? 最佳答案 懒人。看着docs
我正在开发一个 C 程序,用于从 BerkeleyDB DBTree 数据库中提取数据值与特定模式匹配的记录。我创建数据库,打开它,将键的 DBT 和数据的另一个 DBT 清零,将 DBT 标志设置为
所以我有以下成员(member)历史表 User_ID | Start date | End Date | Type(0-7) | ---------------------------
随着最近推出的包dataframe ,我认为是时候正确地对各种数据结构进行基准测试,并突出每种数据结构的优势。我不是每个人的不同优势的专家,所以我的问题是,我们应该如何对它们进行基准测试。 我尝试过的
我有来自 API 的数据,但无法将数组中的数据设置为 vue.js 中的 this.data这是来自 API 的数据(JSON) 你能告诉我这个语法吗 {"id":1613, "name_org":"
在 Vue.js到目前为止,我已经找到了两种定义数据的方法:data: {} 和 data() { return; }. data: { defaultLayout: 'default' }
我正在研究Spring Data Rest Services,并在自定义拦截器中遇到一些问题。之前我使用spring-data-rest-webmvc 2.2.0并以以下方式添加了拦截器。 publi
我是一名优秀的程序员,十分优秀!