r - 基于预测矩阵的数据帧的自动子集化
问题描述
我为大型数据集创建了一个预测矩阵,如下所示:
library(mice)
dfpredm <- quickpred(df, mincor=.3)
A B C D E F G H I J
A 0 1 1 1 0 1 0 1 1 0
B 1 0 0 0 1 0 1 0 0 1
C 0 0 0 1 1 0 0 0 0 0
D 1 0 1 0 0 1 0 1 0 1
E 0 1 0 1 0 1 1 0 1 0
**F 0 0 1 0 0 0 1 0 0 0**
G 0 1 0 1 0 0 0 0 0 0
H 1 0 1 0 0 1 0 0 0 1
I 0 1 0 1 1 0 1 0 0 0
J 1 0 1 0 0 1 0 1 0 0
我想在.基础上创建原始 df 的子集dfpredm
。
更具体地说,我想做以下事情:
假设我的因变量是F
。根据预测矩阵 F 与 C 和 G 相关。此外,C 和 G 最好分别由 D,E 和 B,D 预测。
现在的想法是创建一个df
基于因变量 F 的子集,在该F
行中的值为 1。
Fpredictors <- df[,(dfpredm["F",]) == 1]
但也对其中行为 1 的变量执行相同的F
操作。我正在考虑首先获取这样的列名:
Fpredcol <-colnames(dfpredm[,(dfpredm["c241",]) == 1])
然后for loop
用这些列名做一个?
对于特定示例,我想以子集结尾。
dfsub <- df[,c("F","C","G","B","E","D")]
然而,我想自动化这个过程。谁能告诉我如何做到这一点?
解决方案
这是一种似乎对您有用的策略:
first_preds <- function(dat, predictor) {
cols <- which(dat[predictor, ] == 1)
names(dat)[cols]
}
# wrap first_preds() for getting best and second best predictors
first_and_second_preds <- function(dat, predictor) {
matches <- first_preds(dat, predictor)
matches <- c(matches, unlist(lapply(matches, function(x) first_preds(dat, x))))
c(predictor, matches) %>% unique()
}
dat[first_and_second_preds(dat, "F")] # order is not exactly the same as your output
F C G D E B
A 1 1 0 1 0 1
B 0 0 1 0 1 0
C 0 0 0 1 1 0
D 1 1 0 0 0 0
E 1 0 1 1 0 1
F 0 1 1 0 0 0
G 0 0 0 1 0 1
H 1 1 0 0 0 0
I 0 0 1 1 1 1
J 1 1 0 0 0 0
不确定结果中的顺序是否重要,但如果是,您可以添加逻辑。
从这里使用dat
(一种在 SO 上共享小型 R 数据的更友好的方式):
dat <- read.table(
text = "A B C D E F G H I J
A 0 1 1 1 0 1 0 1 1 0
B 1 0 0 0 1 0 1 0 0 1
C 0 0 0 1 1 0 0 0 0 0
D 1 0 1 0 0 1 0 1 0 1
E 0 1 0 1 0 1 1 0 1 0
F 0 0 1 0 0 0 1 0 0 0
G 0 1 0 1 0 0 0 0 0 0
H 1 0 1 0 0 1 0 0 0 1
I 0 1 0 1 1 0 1 0 0 0
J 1 0 1 0 0 1 0 1 0 0",
header = TRUE
)
一些更通用的东西可以让你直接使用self_select
预测器:
all_preds <- function(dat, predictors) {
unlist(lapply(predictors, function(x) names(dat)[which(dat[x, ] == 1 )]))
}
dat[all_preds(dat, c("A", "B"))]
B C D F H I A E G J
A 1 1 1 1 1 1 0 0 0 0
B 0 0 0 0 0 0 1 1 1 1
C 0 0 1 0 0 0 0 1 0 0
D 0 1 0 1 1 0 1 0 0 1
E 1 0 1 1 0 1 0 0 1 0
F 0 1 0 0 0 0 0 0 1 0
G 1 0 1 0 0 0 0 0 0 0
H 0 1 0 1 0 0 1 0 0 1
I 1 0 1 0 0 0 0 1 1 0
推荐阅读
- flutter - 尝试修复发布版本中的 image_picker 错误。扑
- android - 一些流程单独工作,甚至活动关闭
- powershell - 电源外壳。增加 ForEach-Object -Parallel 中的计数
- java - 如何使用 Java 将特定文件添加到特定目录?
- python - 如何计算列表中的连续字符串
- c# - .Net 5 - Swagger UI - 表单中的必需枚举需要更改才能成功
- azure - “无法订阅成本管理数据”AZURE 成本使用 API
- javascript - 用户输入未正确拆分,提供输入时不会执行实时搜索功能
- android - Android Camera2 在某些设备上捕获旋转 90 度
- python - 使用 aiohttp 和 python 3.8 来自服务器的空回复