Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 根据两个单独的匹配要求删除一行_R - Fatal编程技术网

R 根据两个单独的匹配要求删除一行

R 根据两个单独的匹配要求删除一行,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) 可能

如果有关于这一点的帖子,我道歉——我搜索了很多次,都没有找到任何有效的答案

我需要做的是删除以下示例中所有等于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)

可能是涉及到哪一项声明?任何帮助都将不胜感激

单向使用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.