使用 R 根据特定列中的后缀过滤行
Filtering rows based on suffixes in specific column using R
我有一个大数据框,如下所示:
Din <- c ('test','test_p3_v1','test_p1_v2','test_p1','test_p3_v1','test','test_p2_v3','test_p1_v3','test_p2','test')
Elf <- c ('cat','tiger','mouse','dog','zebra','fish','snake','lion','bird','parrot')
data<- data.frame(Din,Elf)
并且我想扫描 'Din' 列中的每一行,如果其中任何一个名称的后缀中有 'v' 单词,则只保留那些有 'v1' 的名称而不删除任何其他后缀中根本没有 'v' 的人。
我想要这样的输出:
Din_new <- c ('test','test_p3_v1','test_p1','test_p3_v1','test','test_p2','test')
Elf_new <- c ('cat','tiger','dog','zebra','fish','bird','parrot')
data_new<- data.frame(Din_new,Elf_new)
您可以使用 grepl
在逻辑上包含或排除任何匹配的字符串。所以你可以这样说"give me strings that have no '_v' in them OR that have a '_v1' in them."
data_new <- data[!grepl("_v", Din) | grepl("_v1", Din),]
data_new
#> Din Elf
#> 1 test cat
#> 2 test_p3_v1 tiger
#> 4 test_p1 dog
#> 5 test_p3_v1 zebra
#> 6 test fish
#> 9 test_p2 bird
#> 10 test parrot
您可以这样使用 separate
:
library(tidyverse)
data %>%
mutate(Din2 = Din) %>%
separate(Din2, into = c ("Din2", "Version1","Version2")) %>%
filter(Version2 == "v1" | is.na(Version2)) %>%
select(Din,Elf)
我有一个大数据框,如下所示:
Din <- c ('test','test_p3_v1','test_p1_v2','test_p1','test_p3_v1','test','test_p2_v3','test_p1_v3','test_p2','test')
Elf <- c ('cat','tiger','mouse','dog','zebra','fish','snake','lion','bird','parrot')
data<- data.frame(Din,Elf)
并且我想扫描 'Din' 列中的每一行,如果其中任何一个名称的后缀中有 'v' 单词,则只保留那些有 'v1' 的名称而不删除任何其他后缀中根本没有 'v' 的人。
我想要这样的输出:
Din_new <- c ('test','test_p3_v1','test_p1','test_p3_v1','test','test_p2','test')
Elf_new <- c ('cat','tiger','dog','zebra','fish','bird','parrot')
data_new<- data.frame(Din_new,Elf_new)
您可以使用 grepl
在逻辑上包含或排除任何匹配的字符串。所以你可以这样说"give me strings that have no '_v' in them OR that have a '_v1' in them."
data_new <- data[!grepl("_v", Din) | grepl("_v1", Din),]
data_new
#> Din Elf
#> 1 test cat
#> 2 test_p3_v1 tiger
#> 4 test_p1 dog
#> 5 test_p3_v1 zebra
#> 6 test fish
#> 9 test_p2 bird
#> 10 test parrot
您可以这样使用 separate
:
library(tidyverse)
data %>%
mutate(Din2 = Din) %>%
separate(Din2, into = c ("Din2", "Version1","Version2")) %>%
filter(Version2 == "v1" | is.na(Version2)) %>%
select(Din,Elf)