r - 如何消除由一组多数列引起的过度表示?
问题描述
我目前正在与两组一起研究一组遗传数据。P[任意数], P[任意数].PE
这些组是处于不同阶段的患者(P = 初始,PE = 超过 24 周)现在我的 P 组比 PE 组更大。在同一数据帧中大约有 96 个 P 样本,65 个 PE
我已经创建了一个函数来绘制具有两个阶段的 PCA,但是这种由 P 组引起的过度表示移动了所有 PCA。
出于这个原因,我想做的是删除那些不重复的。我的意思是,我只想要一个包含两个样本的数据框。例如:P2和PE_2,P3和PE_3,去掉有P[AnyNumber]但没有PE的
示例数据框:
data <- data.frame(matrix(rbinom(10*1000, 1, .5), ncol=10))
colnames(data) <- c("P1","P1.PE","P10","P100","P101","P101.PE", "P102", "P102.PE","P103","P104")
我期望它是一个带有列的数据框:
P1 | P1.PE | P101 | P101.PE | P102 | P102.PE |
我尝试做的是首先使用 grepl 和 strsplit 过滤数据帧,但我得到了错误,可能有一种更简单的方法可以做到这一点。
data.filter <- data[,c(unlist(data.frame(strsplit(colnames(data[,grepl("\\.",colnames(data))]),"\\."),stringsAsFactors = F)[1,]),colnames(data[,grepl("\\.",colnames(data))]))]
先感谢您。
解决方案
也许我们可以删除从.
列名开始的子字符串,应用duplicated
获取所有重复的列名。
v1 <- sub("\\..*", "", names(data))
newdata <- data[duplicated(v1)|duplicated(v1, fromLast = TRUE)]
names(newdata)
#[1] "P1" "P1.PE" "P101" "P101.PE" "P102" "P102.PE"
推荐阅读
- prolog - 如何在 prolog 中定义字符串连接运算符?
- spring-boot - Spring Boot JASYPT 失败无法绑定“spring.datasource.password”下的属性
- c# - Visual Studio C# HttpClient GET 请求未正确显示文本文件行
- outlook - Outlook 桌面用户无法在任务窗格中单击加载项 UI
- xamarin - Visual Studio:Xamarin - 启动 Android 模拟器时出错
- ocaml - 从 OPAM 输出中删除颜色
- datetime - SSRS 报告发现最长的计算机空闲时间
- python - 简单的正则表达式模式来匹配特定目录中的任何 .py 文件
- sql - 原子地递增整数并根据结果更新另一列
- javascript - 如何使用 javascript 在 React js 中更改滚动方向并获取滚动变量