r - 按 r 中的数值过滤,其中数据集是基于文本的
问题描述
我试图在它们大于5时过滤这些值,但是我给定的数据列具有通过文本形式表示的值,如下所示:
View(vardata)
C1 Variation
DNA GT=00.15,TT=08.11,TA=00.05,GA=00.00
RNA GAU=00.00,GGU=00.90
DNA TGGTTA=00.45,TTGATAA=21.8
DNA ATGG=11.5
RNA GUG=00.05,UGG=00.00
DNA ATA=00.15,ATG=00.95
我真的不知道如何让R将该表单中包含的值解释为数字值,以便过滤它们。
因为我不需要指定哪个字母代码的值大于 X 数,所以理论上我一直试图通过过滤这些值
selectedvalues = subset(vardata, c(Variation) > 5)
我只取Variation列的数值大于5的值,我可以得到类似的东西:
View(selectedvalues)
C1 Variation
DNA GT=00.15,TT=08.11,TA=00.05,GA=00.00
DNA TGGTTA=00.45,TTGATAA=21.8
DNA ATGG=11.5
因为只有在这些情况下才会出现大于5的值。
但是,就像我说的那样,我找不到R解释给定值以便将它们扫描为数字而不是文本或字符的方法。
解决方案
这是使用apply
with的基本 R 方法strsplit
:
keep <- sapply(vardata$Variation, function(x) {
sum(sapply(strsplit(x, ",\\s*")[[1]], function(y) {
as.numeric(strsplit(y, "=")[[1]][2]) > 5
})) > 0
})
vardata[keep, ]
C1 Variation
1 DNA GT=00.15,TT=08.11,TA=00.05,GA=00.00
3 DNA TGGTTA=00.45,TTGATAA=21.8
4 DNA ATGG=11.5
这种方法背后的想法是首先用逗号分割:
[TGGTTA=00.45, TTGATAA=21.8]
然后,我们在 上再次拆分上述两项=
,以提取实际数字。如果给定的行有一个大于 5 的数字,那么我们保留它。
推荐阅读
- ruby-on-rails - Rails 生产服务器 config.cache_classes = true 不会为活动作业正确重新加载自定义服务类
- apache-zeppelin - Apache Zeppelin:每个页面都需要几分钟才能加载
- python - 如何在 python 中对数据框的标记化列进行词形还原?
- c# - Sharepoint API 调用需要太多时间
- api - 在删除日历之前删除事件 - 无法获取事件
- javascript - JavaScript - 如何在使用 InsertBefore() 重新排序后检索类元素的新索引
- python - lxml 将返回空的 lisy 但 requests_html 将返回想要的结果
- c# - c# wpf - 使用ValueConverter时,MVVM不更新UI?
- .htaccess - 如何将所有子域重定向到域/子域
- python - 是否有一种神奇的方法可以在 python OOP 中创建一个列表对象