r - 在不合并的情况下提取值并找到最小值
问题描述
我正在尝试提取一个潜文本并从 R 中的列表中获取最小值。我的初始 tsv 看起来像这样(这是一个较小的版本):
cases counts
"S35718:10.63,S35585:6.75,S35708:7.28,S36617:12.23" "6.75,7.28,10.63,12.23,6.17,4.09,3.95,5.00"
"S35718:10.63" "10.63"
我试图提取冒号后的数字并找到最小值,然后我想看看计数列中有多少大于最小值。
例如,我理想的输出是:
min: 6.75
greater than 6.75 in counts column: 4
在这个 .tsv 中,大约有 100,000 行。我尝试过使用 gsub,但它最终会合并所有数字,如下例所示:
test <- gsub(".*:", "",outlier$cases)
[1]"10.63" "6.75" "7.28" "12.23" "10.63" ... all the other subsequent values
我将不胜感激这方面的任何帮助。我是 R 的初学者,但很想进一步改进。太感谢了!
解决方案
一种选择是提取 之后的数字:
,将其转换为numeric
,获取min
并通过创建逻辑表达式找到计数,然后取sum
library(stringr)
library(dplyr)
library(purrr)
library(tidyr)
outlier %>%
transmute(caselist = str_extract_all(cases, "(?<=:)\\d+\\.\\d+"),
countlist = str_extract_all(counts, "[0-9.]+")) %>%
transmute(out = map2(caselist, countlist,
~tibble(min = min(as.numeric(.x)),
greater_than_min = sum(as.numeric(.y) >= min)))) %>%
unnest_wider(c(out))
# A tibble: 2 x 2
# min greater_than_min
# <dbl> <int>
#1 6.75 4
#2 10.6 1
数据
outlier <- structure(list(cases = c("S35718:10.63,S35585:6.75,S35708:7.28,S36617:12.23",
"S35718:10.63"), counts = c("6.75,7.28,10.63,12.23,6.17,4.09,3.95,5.00",
"10.63")), class = "data.frame", row.names = c(NA, -2L))
推荐阅读
- android - 在没有后端的 Android 应用中接收云端硬盘内容通知
- java - 关闭 JFrame 但继续执行程序
- batch-file - 从文件名创建文件夹列表
- macos - 如何通过终端启动浏览器并将其打开到 Mac 上的特定网页?
- amp-html - AMP手风琴的标题背景如何更改?
- c# - 从不同长度的字符串中获取特定长度的字符串
- javascript - 如何检测单击的元素是否不是jQuery中元素的子元素?
- c - 参数c[a][b]和c[][2]有什么区别
- python - Python解析json文件以访问返回TypeError的值
- c++ - 如何从 OpenCV C++ 中的 HoughLines 函数输出中绘制所需的线?