gpt4 book ai didi

保留 R 数据框中的行,这些行在列中包含特定模式

转载 作者:行者123 更新时间:2023-12-05 02:35:24 30 4
gpt4 key购买 nike

df 是一个测试数据框,其中我只想保留 Hits 列中包含 | 字符的行和行其中包含 hits(即 Hit1、Hit2 等)以及 Hits 列中的空白单元格。

df <- data.frame(
Hits = c("# test114", "# ID|987129470", "# 13135", "Hit1", "", "Hit2", "Hit3", "", "# test739", "# ID|6971324987", "# 83771", "Hit1", "Hit2", "", "Hit3"),
Category1 = c(NA, NA, NA, 0.001, 0.001, 0.002, 0.003, 0.003, NA, NA, NA, 0.023, 0.341, 0.341, 0.569),
Category2 = c(NA, NA, NA, 100, 100, 99, 98, 98, NA, NA, NA, 100, 95, 95, 97),
Category3 = c(NA, NA, NA, 100, 100, 99, 98, 98, NA, NA, NA, 98, 97, 97, 92)
)

df 看起来像这样

enter image description here

输出应该是这样的

enter image description here

由于我只想保留具有 | 字符的行和不具有 # 字符的行以及空白单元格,模式匹配可能会有所帮助。但我似乎无法弄清楚如何在代码中实现它。有什么建议吗?

请注意,在原始数据框中,hits 可以有不同的名称。一些命中不以“命中”一词开头

最佳答案

我们可以使用带有正则表达式模式的 grep - "^[^#]+$|\\| (点击没有 # 的列> 从开始 (^) 到结束 ($) 或 (|) | 字符 - 转义是元字符)

subset(df, grepl("^[^#]+$|\\|", Hits)|Hits == "")
Hits Category1 Category2 Category3
2 # ID|987129470 NA NA NA
4 Hit1 0.001 100 100
5 0.001 100 100
6 Hit2 0.002 99 99
7 Hit3 0.003 98 98
8 0.003 98 98
10 # ID|6971324987 NA NA NA
12 Hit1 0.023 100 98
13 Hit2 0.341 95 97
14 0.341 95 97
15 Hit3 0.569 97 92

或者在单个 grepl

中执行此操作
> subset(df, grepl("^$|^[^#]+$|\\|", Hits))
Hits Category1 Category2 Category3
2 # ID|987129470 NA NA NA
4 Hit1 0.001 100 100
5 0.001 100 100
6 Hit2 0.002 99 99
7 Hit3 0.003 98 98
8 0.003 98 98
10 # ID|6971324987 NA NA NA
12 Hit1 0.023 100 98
13 Hit2 0.341 95 97
14 0.341 95 97
15 Hit3 0.569 97 92

或者在dplyr

library(dplyr)
library(stringr)
df %>%
filter(str_detect(Hits, "^[^#]+$|\\|")|Hits == "")
Hits Category1 Category2 Category3
1 # ID|987129470 NA NA NA
2 Hit1 0.001 100 100
3 0.001 100 100
4 Hit2 0.002 99 99
5 Hit3 0.003 98 98
6 0.003 98 98
7 # ID|6971324987 NA NA NA
8 Hit1 0.023 100 98
9 Hit2 0.341 95 97
10 0.341 95 97
11 Hit3 0.569 97 92

关于保留 R 数据框中的行,这些行在列中包含特定模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70570261/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com