R 根据两个单独的匹配要求删除一行
如果有关于这一点的帖子,我道歉——我搜索了很多次,都没有找到任何有效的答案 我需要做的是删除以下示例中所有等于66的行,前提是存在重复的动物类型,而不是66R 根据两个单独的匹配要求删除一行,r,R,如果有关于这一点的帖子,我道歉——我搜索了很多次,都没有找到任何有效的答案 我需要做的是删除以下示例中所有等于66的行,前提是存在重复的动物类型,而不是66 animals <- c("dog", "dog", "dog", "cat", "cat", "cat", "mouse", "mouse", "rat", "rat") number <- c(1,2,66,2,66,66,66,66,2,1) df <- data.frame(animals,number) 可能
animals <- c("dog", "dog", "dog", "cat", "cat", "cat", "mouse", "mouse", "rat", "rat")
number <- c(1,2,66,2,66,66,66,66,2,1)
df <- data.frame(animals,number)
可能是涉及到哪一项声明?任何帮助都将不胜感激 单向使用base R
ave
检查是否有动物有66以外的数字,如果有,则返回忽略66的数字,否则返回所有行
df[with(df, ave(number != 66, animals, FUN = function(x) if (any(x)) x else !x)), ]
# animals number
#1 dog 1
#2 dog 2
#3 cat 2
#4 mouse 66
#5 mouse 66
#6 rat 2
#7 rat 1
dplyr
版本将filter
包含所有66行的组,否则忽略包含66行的行
library(dplyr)
df %>%
group_by(animals) %>%
filter(all(number == 66) | number != 66)
# animals number
# <fct> <dbl>
#1 dog 1
#2 dog 2
#3 cat 2
#4 mouse 66
#5 mouse 66
#6 rat 2
#7 rat 1
库(dplyr)
df%>%
分组依据(动物)%>%
过滤器(全部(编号==66)|编号!=66)
#动物数量
#
#1只狗1只
#2狗2
#3第2类
#4鼠标66
#5鼠标66
#6老鼠2
#7鼠1
使用dplyr
library(dplyr)
df %>% group_by(animals) %>%
mutate(Flag= case_when( number %in% c(1,2) ~ 1,
all(number == 66) ~ 1,
number == 66 ~ 0)) %>%
filter(Flag==1) %>% select(-Flag) %>% ungroup()
# A tibble: 7 x 2
animals number
<chr> <dbl>
1 dog 1.
2 dog 2.
3 cat 2.
4 mouse 66.
5 mouse 66.
6 rat 2.
7 rat 1.
库(dplyr)
df%>%组(动物)%>%
变异(Flag=case_,当%c(1,2)中的数字%1,
全部(数字=66)~1,
数字==66~0))%>%
筛选器(标志==1)%%>%select(-Flag)%%>%ungroup()
#一个tibble:7x2
动物数量
一只狗。
狗2。
3第2类。
4老鼠66。
5鼠标66。
6老鼠2。
7老鼠1。
library(dplyr)
df %>%
group_by(animals) %>%
filter(all(number == 66) | number != 66)
# animals number
# <fct> <dbl>
#1 dog 1
#2 dog 2
#3 cat 2
#4 mouse 66
#5 mouse 66
#6 rat 2
#7 rat 1
library(dplyr)
df %>% group_by(animals) %>%
mutate(Flag= case_when( number %in% c(1,2) ~ 1,
all(number == 66) ~ 1,
number == 66 ~ 0)) %>%
filter(Flag==1) %>% select(-Flag) %>% ungroup()
# A tibble: 7 x 2
animals number
<chr> <dbl>
1 dog 1.
2 dog 2.
3 cat 2.
4 mouse 66.
5 mouse 66.
6 rat 2.
7 rat 1.